gpt4 book ai didi

python - 在 Tensorflow 上对两层训练的神经模型进行预测

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:00 24 4
gpt4 key购买 nike

我在使用 Tensor 上经过训练的神经模型进行预测时遇到问题。这是我的尝试:

import tensorflow as tf
import pandas, numpy as np
dataset=[[0.4,0.5,0.6,0],[0.6,0.7,0.8,1],[0.3,0.8,0.5,2],....]

X = tf.placeholder(tf.float32, [None, 3])
W = tf.Variable(tf.zeros([3,10]))
b = tf.Variable(tf.zeros([10]))

Y1 = tf.matmul(X, W) + b

W1 = tf.Variable(tf.zeros([10, 1]))
b1 = tf.Variable(tf.zeros([1]))
Y = tf.nn.sigmoid(tf.matmul(Y1, W1) + b1)

# placeholder for correct labels
Y_ = tf.placeholder(tf.float32, [None, 1])
init = tf.global_variables_initializer()
# loss function


cross_entropy = -tf.reduce_sum(Y_ * tf.log(Y))
optimizer = tf.train.GradientDescentOptimizer(0.003)
train_step = optimizer.minimize(cross_entropy)


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

for i in range(1000):
# load batch of images and correct answers
batch_X, batch_Y = [x[:3] for x in dataset[:4000]],[x[-1:] for x in dataset[:4000]]
train_data={X: batch_X, Y_: batch_Y}
sess.run(train_step, feed_dict=train_data)

correct_prediction = tf.equal(tf.argmax(Y,1), tf.argmax(Y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
a,c = sess.run([accuracy, cross_entropy], feed_dict=train_data)

test, lebs=[x[:3] for x in dataset[4000:]],[x[-1:] for x in dataset[4000:]]
test_data={X: test, Y_: lebs}
a,c = sess.run([accuracy, cross_entropy], feed_dict=test_data)
prediction=tf.argmax(Y,1)
print ("predictions", prediction.eval({X:test}, session=sess))

运行上述代码时得到以下结果:

predictions [0 0 0 ..., 0 0 0]

我的预期输出应该是类标签:

predictions `[0,1,2....]`

我会感谢您的建议。

最佳答案

您的代码存在多个问题:

初始化:您将权重变量初始化为零。

W = tf.Variable(tf.zeros([3,10]))

如果您对模型进行零初始化,您的模型将在所有类型的输入的每一层继续传播相同的值。使用随机值对其进行初始化。例如:

W = tf.Variable(tf.truncated_normal((3,10)))

损失函数:我相信您正在尝试将这个看起来熟悉的方程复制为您的损失函数:y * log(prob) + (1 - y) * log(1 - prob)。我相信你总共有10节课。对于 10 个类中的每一个,您都必须替换上面的等式并记住,您将使用上面等式中的 y 值作为正确的类或错误的类,即每个类仅使用 1 或 0。不要将 y 值替换为 0 到 9 之间的类标签。

为了避免所有这些计算,我建议您使用 Tensorflow 的内置函数,例如 tf.nn.softmax_cross_entropy_with_logits。这会对你有很大帮助。

Sigmoid 函数:这是导致所有输出的值仅为 0 的罪魁祸首。 sigmoid的输出范围是0到1,可以考虑用ReLU代替。

输出单位:如果您正在进行分类,则最终层中的神经元数量应等于类别数量。每个类表示一个输出类。将其替换为 10 个神经元。

学习率:继续调整你的学习率。我相信对于这么小的网络来说,你的学习率有点高。

希望您理解代码中的问题。请谷歌搜索我提到的上述每一点以获取更多详细信息,但我已经为您提供了足够的信息来开始解决问题。

关于python - 在 Tensorflow 上对两层训练的神经模型进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701749/

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