gpt4 book ai didi

python - Tensorflow - 具有自定义数据集的卷积神经网络无法学习

转载 作者:行者123 更新时间:2023-11-30 08:54:51 25 4
gpt4 key购买 nike

我正在尝试为自定义数据集创建一个卷积神经网络。分类器只有两个类。我能够正确读取输入图像,并且还为它们分配了两个相应类的batch_labels。代码执行没有错误,但输出异常。由于某种原因,准确率始终为 50%。

image=inputs()

image_batch=tf.train.batch([image],batch_size=150)
label_batch_pos=tf.train.batch([tf.constant([0,1])],batch_size=75) # label_batch for first class
label_batch_neg=tf.train.batch([tf.constant([1,0])],batch_size=75) # label_batch for second class
label_batch=tf.concat(0,[label_batch_pos,label_batch_neg])

W_conv1 = weight_variable([5, 5, 3, 32])
b_conv1 = bias_variable([32])

image_4d = tf.reshape(image, [-1,32,32,3])

h_conv1 = tf.nn.relu(conv2d(image_4d, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

W_fc1 = weight_variable([8 * 8 * 64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1, 8*8*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
h_fc1_drop = tf.nn.dropout(h_fc1, 0.5)

W_fc2 = weight_variable([1024, 2])
b_fc2 = bias_variable([2])

y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
cross_entropy = -tf.reduce_sum(tf.cast(label_batch,tf.float32)*tf.log(y_conv+1e-9))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)


tf.train.start_queue_runners(sess=sess)
correct_prediction=tf.equal(tf.argmax(y_conv,1), tf.argmax(label_batch,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

for i in range(100):
train_step.run(session=sess)
print(sess.run(accuracy))

print(sess.run(correct_prediction))

当我打印 Correct_prediction 张量时,无论如何我都会得到以下输出。

[ True  True  True  True  True  True  True  True  True  True  True  True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False]

准确度始终为 0.5,就好像权重根本没有更新一样。当我在每个训练步骤后打印权重时,它们保持不变。我想我有一些编码错误。网络是否会一次又一次地对同一张图像进行训练?但即便如此,权重也必须更新。我有 150 个训练样本,每个类 75 个。有人可以指出我正确的方向吗?

编辑:这就是我初始化权重的方式

def weight_variable(shape,name):
initial = tf.truncated_normal(shape, stddev=0.5)
return tf.Variable(initial,name=name)

def bias_variable(shape,name):
initial = tf.constant(1.0, shape=shape)
return tf.Variable(initial,name=name)

最佳答案

您的网络存在一些设计缺陷。由于数学问题,自己计算交叉熵并在输出层上应用 softmax 并不是一个好主意。如果您对数学感兴趣,如果不坚持 Tensorflow 解释和方法,我可以添加此内容:tf.nn.softmax_cross_entropy_with_logits .

您是否已经尝试过多种不同的配置?根据图像的复杂性,更高或更低的内核大小和特征图数量可能是个好主意。一般来说,如果你的图像相对同质,就会添加很多相当相似的信息,因此如果你有很多特征图,网络就很难收敛。由于你只有两个输出神经元,我认为图像不是很复杂?

接下来就是你的退学。您始终使用 0.5 的 dropout,但通常,对于测试/验证(如您的准确性预测),您不使用 dropout。在大多数情况下,您仅将其用于训练。您可以创建一个占位符来指定您的退出率并提供此 sess.run

这是我自己的一些例子:

h_fc_drop = tf.nn.dropout(h_fc, keep_prob)

(...)

accu, top1, top3, top5 = sess.run([accuracy, te_top1, te_top3, te_top5],
feed_dict={
x: teX[i: i + batch_size],
y: teY[i: i + batch_size]
keep_prob: 1.0
}
)

这可以让 Tensorflow 计算我的准确度topX错误率方程,同时我输入测试数据输入teX和真实标签teY 表示输出,dropout 的保持概率 keep_prob 为 1.0。

尽管如此,权重的初始化在深度神经网络中非常重要。即使你的设计足以解决你的问题(这也必须进行调查),如果你的权重没有正确初始化,你的网络可能会拒绝学习、发散或收敛到 0。您没有向初始化添加详细信息,因此您可能需要查找Xavier 初始化This是 Xavier 初始化的一个简单开始。

最后,我可以鼓励您绘制一些权重、特征图、随时间变化的输出等,以了解您的网络正在做什么。通常这会有很大帮助。

关于python - Tensorflow - 具有自定义数据集的卷积神经网络无法学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com