Всем привет, разрабатываю сейчас нейросеть, но не хватает знаний и навыков. Пишу на python c tf.keras, модель Sequential
Пытаюсь воспроизвести классическую задачу переноса стиля, с некоторыми доп. параметрами.
Конкретнее, на входе я подаю маленькие кусочки большого изображения + позиция изображения на большой картинке + миниатюра большого изображения. На выходе у меня этот же кусочек изображения. Обучаю на 30 больших изображениях.
С изображением небольшого размера (32х32) всё работает отлично, со значением inner_layers = 3 через 500 эпох я получаю более менее приемлемое изображение:
Но вот с 400х300 изображение уходит в loss = 0.009 а предсказания показывают только градиенты.
- learning rate пробовал уменьшать, без результатов.
- изменение loss function на CategoricalCrossentropy "ломает" модель, loss поднимается до 2000, а предсказания - статичная картинка
- аналогично ломается модель, если изменить функцию активации слоёв с relu на sigmoid. Хотя, если не ошибаюсь, то установка друг за другом нескольких relu слоёв одинаковой длины - должна быть бессмысленной.
код модели:inner_layers = 9
model = models.Sequential()
model.add(layers.Dense(input_size, input_dim=input_size))
for i in range(inner_layers):
model.add(layers.Dense(input_size, activation='relu'))
model.add(layers.Dense(int(output_size/8), activation='relu'))
for i in range(inner_layers):
model.add(layers.Dense(output_size, activation='relu'))
model.add(layers.Dense(output_size, activation='linear'))
model.compile(loss='MeanAbsoluteError')
Приму любые советы, как можно улучшить модель или даже какую архитектуру стоит использовать.
Пробовал так же использовать CNN, но я не знаю, как во входные данные дать ему доп. параметры, кроме самого изображения.
Использовать RNN было бы тоже логично, но не совсем понятно, как организовать использование двумерной памяти, чтобы картинка ориентировалась не только на картинку "слева", но и "сверху".
Так же, понятно, что можно использовать готовое решение а-ля это, но там используется не Keras, и к такой реализации я пока не готов.
P.S. кроме этого часть входа с кусочками изображения я заменяю пустым значением, чтобы нейросеть не училась воспроизводить изображение по нему 1 к 1, а ориентировалась на миниатюру и позицию. Но здесь, кажется, тоже не все так гладко.
Подробнее
UJD 150 2QD 250 Original 5D So ¡50 äo 250 300 3SD 0 50 - 10D 150 - 200 250- 0 50 10D 150 Predict 2QD So 300 So
0 5 10 15 20 25 Original 0 10 20 30 30 Predict
нейронные сети,Tensorflow,разработка,пидоры помогите,реактор помоги,песочница
А так ты делаешь какую-то хуйню.
Если хочешь так сказать from scratch почитай книжку Генеративное обучение, там норм расписан перенос стиля.
@
Страдать почему мой ИИ не захватил мир