Я обучаю автоэнкодер, используя градиентную ленту для передачи нейронного стиля. Я не нахожу разницы в потерях даже через тысячи эпох. Я пробовал с разными размерами пакетов и скоростью обучения. Следует упомянуть, что он обучается во время тренировки с одним изображением, и когда я использую пакетное обучение, потери не снижаются. Мой вопрос в том, как мы должны изменить скорость обучения, если одно изображение работает нормально. 0.001 работает нормально. Для пакетного обучения я должен увеличить или уменьшить его. Пожалуйста, дайте мне знать ваши предложения вот моя функция шага поезда
#gradient tape for training
def train_step(images,step):
c=tf.Variable(initial_value=0,dtype="float32")
with tf.GradientTape() as tape:
for i in range(int(5)):
w=(i+step)%lent
content_targets=cont[w]
outputs = extractor(model_(images[w]))
loss = style_content_loss(outputs,content_targets)
total_variation_weight=30
loss += total_variation_weight*tf.image.total_variation(model_(images[w]))
c=c+loss
loss=tf.reduce_mean(c)
print("loss:",loss)
gradients = tape.gradient(loss, model_.trainable_variables)
opt.apply_gradients(zip(gradients, model_.trainable_variables))
, а это функция потерь
def style_content_loss(outputs,content_targets):
style_outputs = outputs['style']
content_outputs = outputs['content']
style_loss = tf.add_n([tf.reduce_mean((style_outputs[name]-style_targets[name])**2)
for name in style_outputs.keys()])
style_loss *= style_weight / num_style_layers
content_loss = tf.add_n([tf.reduce_mean((content_outputs[name]-content_targets[name])**2)
for name in content_outputs.keys()])
content_loss *= content_weight / num_content_layers
loss = style_loss +content_loss
return loss