tensorflow - CNN 模型在添加一个/两个以上卷积层时不会学习

标签 tensorflow deep-learning

我正在尝试在 tensorflow 中实现图中的模型。我没有使用 6 个输出神经元,而是使用了 1000 个输出神经元。我这样做是为了获得预训练的权重。 enter image description here

我实现了完整的模型,但只有一层 (14,14,128);只是为了测试等等。现在程序已经成熟了,我又实现了两层(或一层)。这使得模型无法学习任何东西;损失是恒定的(围绕小噪声),并且在训练图像上测试的准确性在随机猜测时是恒定的。在添加图层之前,我可以非常快地(5-10 分钟)从训练数据集中获得 1000 个图像子集,准确率达到 70-80%。如前所述,附加层的情况并非如此。

以下是附加层的代码,其中 s1s2 是转换的步幅:

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)

这个额外的层使模型变得毫无值(value)。我尝试了不同的超参数(学习率、批量大小、时期)但没有成功。问题出在哪里?

另一个问题可能是:是否有人知道这种规模的小型(和/或更好)网络,以便我可以实现和测试。我的目标是检测不同物体(物体图像)中的抓取位置?

如果有帮助的话,我使用一台 GTX 980 和一个非常非常好的 Xeon。

可以在 https://github.com/tnikolla/grasp-detection 中找到该存储库。

更新

问题在于损失的差异。通过降低学习率来解决

橙色是程序根本没有学习时的准确性和损失(张量板和终端)。我被终端显示的损失愚弄了。正如 @hars 所指出的,检查准确性和损失的日志时,我发现张量板中的损失在第一步中出现了分歧。通过将学习率从 0,01 更改为 0,001,分歧消失了,正如您在青色中看到的那样,模型正在学习(在 1 分钟内过度拟合了 imagente 的一小部分)。 enter image description here enter image description here enter image description here

最佳答案

模型末尾有一个 ReLU 层,它可能会剪切所有梯度,后面是训练部分中带有 logits 的 softmax。因此,模型可能会陷入较差的局部最小值。

尝试删除推理最后一行中的 tf.nn.relu,看看它是否训练得很好。

这是您的代码部分:

模型的最后几行:

# fc1 layer
W_fc3 = weight_variable([512, 1000])
b_fc3 = bias_variable([1000])
output = tf.nn.relu(tf.matmul(h_fc2, W_fc3) + b_fc3)
#print("output: {}".format(output.get_shape()))

return output

训练部分代码:

logits = inference_redmon.inference(images)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
        logits=logits, labels=labels_one))        
tf.summary.scalar('loss', loss)
correct_pred = tf.equal( tf.argmax(logits,1), tf.argmax(labels_one,1))
accuracy = tf.reduce_mean( tf.cast( correct_pred, tf.float32))

关于tensorflow - CNN 模型在添加一个/两个以上卷积层时不会学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450841/

相关文章:

python - tf.compat.v1.random_normal() 中 random_normal 的平均值和标准差是什么意思?

python - 将注释从 Mask-RCNN 数据集格式转换为 COCO 格式

machine-learning - Keras:为什么 'accuracy' 高于 'val_acc' ?

python - 如何循环遍历 (none, 256) 形状张量数组?

python - ValueError : Tensor conversion requested dtype int32 for Tensor with dtype float32 while using tf. 图像.crop_to_bounding_box

android - 量化的 tflite 模型比未量化的 apk 大

python - Tensorflow 无效参数 : Assertation Failed [Label IDs must < n_classes]

python - 如何在 RNN 模型中使用图像集

python - 为什么激活值 (Softmax) 的预测会给出错误的结果?

machine-learning - 如何将语音文件输入RNN/LSTM进行语音识别?