在几个时代之后,损失开始跳跃

时间:2018-05-11 06:22:23

标签: tensorflow machine-learning deep-learning training-data nvidia-digits

我正在尝试训练神经网络来检测隐写图像。我使用了Tensorflow的Nvidia数字。我的问题是损失开始逐渐减少然后开始跳跃。

我的神经网络是 -

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

我正在使用具有0.0005基本学习率的SGD。我将步长改为5%,伽马值为0.95。 (我研究时使用了这些设置,并且在学习速度没有降低得足够快的时候,学习损失开始跳了一段时间 - 之前我使用0.0005基本速率和nvidia数字默认步长)。

你知道如何让损失逐渐减少吗?任何有关建立网络的建议或指导都将受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,如果有人遇到同样的问题,我所做的就是将初始损失调整为0.0001,将步长调整为5%,将伽玛调整为0.9。它给了我一个大致逐渐减少的损失。

enter image description here

但我认为学习率太低,因为损失并没有像我希望的那样下降。