为什么模型在归一化后表现不佳?

时间:2018-11-12 03:41:33

标签: python tensorflow machine-learning neural-network

我正在使用完全连接的神经网络,并且正在使用归一化的数据,以便每个样本值的范围从0到1。在训练过程中,我在第一层使用了100个神经元,在第二层使用了10个神经元,并且在训练过程中使用了近50个缺乏样本。我想将数据分为两类。但是我的网络性能太低,在培训和测试数据上几乎达到49%。我试图通过更改超级参数的值来提高性能。但这没有用。有人可以告诉我如何获得更高的性能吗?

x = tf.placeholder(tf.float32, [None, nPixels])
W1 = tf.Variable(tf.random_normal([nPixels, nNodes1], stddev=0.01))
b1 = tf.Variable(tf.zeros([nNodes1]))
y1 = tf.nn.relu(tf.matmul(x, W1) + b1)

W2 = tf.Variable(tf.random_normal([nNodes1, nNodes2], stddev=0.01))
b2 = tf.Variable(tf.zeros([nNodes2]))
y2 = tf.nn.relu(tf.matmul(y1, W2) + b2)

W3 = tf.Variable(tf.random_normal([nNodes2, nLabels], stddev=0.01))
b3 = tf.Variable(tf.zeros([nLabels]))
y = tf.nn.softmax(tf.matmul(y2, W3) + b3)

y_ = tf.placeholder(dtype=tf.float32, shape=[None, 2])

cross_entropy = -1*tf.reduce_sum(y_* tf.log(y), axis=1)    
loss = tf.reduce_mean(cross_entropy)

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
correct_prediction = tf.equal(tf.argmax(y_,axis=1), tf.argmax(y, axis=1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

1 个答案:

答案 0 :(得分:1)

您的计算模型对“图像”一无所知,只看到数字。因此,如果您使用0到255之间的像素值训练它,它将了解“亮”的含义,“暗”的含义以及它们如何结合起来为您提供要尝试建模的任何目标值。

通过归一化所做的是,您将所有像素强制为0-1。因此,就模型而言,它们全都像黑夜一样黑。毫不奇怪,它无法提取任何有意义的东西。

在培训和测试期间都需要应用相同的输入归一化。

关于NN模型的归一化,最好归一化为零均值。

相关问题