【发布时间】:2017-11-11 01:28:17
【问题描述】:
我正在尝试在tensorflow中实现图中的模型。我有 1000 个而不是 6 个输出神经元。我这样做是为了获得预训练的权重。
我实现了完整的模型,但只有一个 (14,14,128) 层;只是为了测试等等。现在 porgram 已经成熟,我实现了另外两层(或一层)。这使得模型没有学到任何东西;损失是恒定的(围绕一个小噪声),并且在训练图像上测试的准确度在随机猜测时是恒定的。在添加层之前,我可以非常快(5-10 分钟)在训练数据集中的 1000 个图像子集中达到 70-80% 的准确度。如前所述,附加层并非如此。
这是附加层的代码,其中s1 和s2 是conv 的步幅:
w2 = weight_variable([3,3,64,128])
b2 = bias_variable([128])
h2 = tf.nn.relu(conv2d_s2(h1_pool,w2)+b2)
h2_pool = max_pool_2x2(h2)
#Starts additional layer
w3 = weight_variable([3,3,128,128])
b3 = bias_variable([128])
h3 = tf.nn.relu(conv2d_s1(h2_pool,w3)+b3)
#Ends additional layer
w5 = weight_variable([3,3,128,256])
b5 = bias_variable([256])
h5 = tf.nn.relu(conv2d_s1(h3,w5)+b5)
h5_pool = max_pool_2x2(h5)
这个额外的层使模型一文不值。我尝试了不同的超参数(学习率、批量大小、时期)但没有成功。问题出在哪里?
另一个问题可能是:是否有人知道这种规模的小型(和/或更好)网络,以便我可以改进和测试。我的目标是检测不同物体(物体图像)中的抓取位置?
如果有帮助,我会使用一台 GTX 980 和非常好的至强。
可以在https://github.com/tnikolla/grasp-detection 中找到存储库。
更新
问题是损失的分歧。通过降低学习率解决
橙色是程序完全没有学习时的准确性和损失(张量板和终端)。我被终端显示的损失愚弄了。正如@hars 所指出的那样检查准确性和损失的日志,我发现张量板中的损失在第一步中是不同的。通过将学习率从 0,01 更改为 0,001,分歧消失了,正如您在青色中看到的那样,模型正在学习(在 1 分钟内过度拟合了一小部分图像)。
【问题讨论】:
-
您能发布您的完整模型代码和训练/优化器代码和参数吗?
-
这里是github 链接。
-
添加层并不总能提高性能,因为优化问题更难,您是否尝试过使用 Batch Normalization?
-
我将添加批量标准化。我也想辍学。但首先是一些数据增强。我一次只用一种方法来丰富程序,并伴随着论文阅读、实验、张量流……我正在使用这个项目来收集一些知识和经验:)