Потеря начинает прыгать после нескольких эпох - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь обучить нейронную сеть для обнаружения стеганографических изображений.Я использовал Nvidia Digits с Tensorflow.Моя проблема в том, что потеря начинает постепенно уменьшаться, а затем начинает прыгать.

Моя нейронная сеть - -

from model import Tower
from utils import model_property
import tensorflow as tf
import tensorflow.contrib.slim as slim
import utils as digits

class UserModel(Tower):

    @model_property
    def inference(self):
        x = tf.reshape(self.x, shape=[-1, self.input_shape[0], self.input_shape[1], self.input_shape[2]])
        with slim.arg_scope([slim.conv2d, slim.fully_connected],
                            weights_initializer=tf.contrib.layers.xavier_initializer(),
                            weights_regularizer=slim.l2_regularizer(0.00001)):
            conv1 = tf.layers.conv2d(inputs=x, filters=64, kernel_size=7, padding='Valid', strides=2, activation=tf.nn.relu)
            rnorm1 = tf.nn.local_response_normalization(input=conv1)
            conv2 = tf.layers.conv2d(inputs=rnorm1, filters=16, kernel_size=5, padding='Valid', strides=1, activation=tf.nn.relu)
            rnorm2 = tf.nn.local_response_normalization(input=conv2) 
            flatten = tf.contrib.layers.flatten(rnorm2)
            fc1 = tf.contrib.layers.fully_connected(inputs=flatten, num_outputs=1000, activation_fn=tf.nn.relu)
            fc2 = tf.contrib.layers.fully_connected(inputs=fc1, num_outputs=1000, activation_fn=tf.nn.relu)
            fc3 = tf.contrib.layers.fully_connected(inputs=fc2, num_outputs=2, activation_fn=None)
            return fc3

    @model_property
    def loss(self):
        model = self.inference
        loss = digits.classification_loss(model, self.y)
        accuracy = digits.classification_accuracy(model, self.y)
        self.summaries.append(tf.summary.scalar(accuracy.op.name, accuracy))
        return loss

enter image description here

Я использую SGD с базовой скоростью обучения 0,0005.Я изменил размер шага до 5% с гаммой 0,95.(Я использовал эти настройки, когда исследовал, и узнал, что потери начинают прыгать через некоторое время, когда скорость обучения снижается недостаточно быстро - раньше я использовал 0,0005 с базовой скоростью и размером шага по умолчанию для цифр nvidia).

Знаете ли вы, как постепенно уменьшить потери?Будем благодарны за любые советы или рекомендации по созданию сети.

Спасибо!

1 Ответ

0 голосов
/ 12 мая 2018

Так что, если у кого-то возникла такая же проблема, то я установил начальные потери на 0,0001, размер шага на 5% и гамму на 0,9. Это дало мне в основном постепенное сокращение потерь.

enter image description here

Но я думаю, что скорость обучения слишком низкая, поскольку потери не снижаются так сильно, как хотелось бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...