gpt4 book ai didi

python - Tensorflow 总是预测相同的输出

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

所以,我正在尝试学习 tensorflow,为此,我尝试为一些我认为并不难的东西创建一个分类器。我想预测一个数字是奇数还是偶数。问题是 Tensorflow 总是预测相同的输出,我最近几天搜索了答案但没有任何帮助......我看到了以下答案:- Tensorflow predicts always the same result

- TensorFlow always converging to same output for all items after training

- TensorFlow always return same result

这是我的代码:

在:

df
nb y1
0 1 0
1 2 1
2 3 0
3 4 1
4 5 0
...
19 20 1

inputX = df.loc[:, ['nb']].as_matrix()
inputY = df.loc[:, ['y1']].as_matrix()
print(inputX.shape)
print(inputY.shape)

输出:

(20, 1)(20, 1)

在:

# Parameters
learning_rate = 0.00000001
training_epochs = 2000
display_step = 50
n_samples = inputY.size


x = tf.placeholder(tf.float32, [None, 1])
W = tf.Variable(tf.zeros([1, 1]))
b = tf.Variable(tf.zeros([1]))
y_values = tf.add(tf.matmul(x, W), b)
y = tf.nn.relu(y_values)
y_ = tf.placeholder(tf.float32, [None,1])

# Cost function: Mean squared error
cost = tf.reduce_sum(tf.pow(y_ - y, 2))/(2*n_samples)
# Gradient descent
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

# Initialize variabls and tensorflow session
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for i in range(training_epochs):
sess.run(optimizer, feed_dict={x: inputX, y_: inputY}) # Take a gradient descent step using our inputs and labels

# Display logs per epoch step
if (i) % display_step == 0:
cc = sess.run(cost, feed_dict={x: inputX, y_:inputY})
print("Training step:", '%04d' % (i), "cost=", "{:.9f}".format(cc)) #, \"W=", sess.run(W), "b=", sess.run(b)

print ("Optimization Finished!")
training_cost = sess.run(cost, feed_dict={x: inputX, y_: inputY})
print ("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n')

输出:

Training step: 0000 cost= 0.250000000
Training step: 0050 cost= 0.250000000
Training step: 0100 cost= 0.250000000
...
Training step: 1800 cost= 0.250000000
Training step: 1850 cost= 0.250000000
Training step: 1900 cost= 0.250000000
Training step: 1950 cost= 0.250000000
Optimization Finished!
Training cost= 0.25 W= [[ 0.]] b= [ 0.]

在:

sess.run(y, feed_dict={x: inputX })

输出:

array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]], dtype=float32)

我尝试使用我的 Hyper 参数,例如学习率或训练周期数。我将激活函数从 softmax 更改为 relu。我更改了我的数据框以包含更多示例,但什么也没发生。我还尝试为我的权重添加随机数,但没有任何改变,成本刚刚开始上升。

最佳答案

通过快速查看代码,我觉得它没问题(可能是将权重初始化为零的部分,通常你想要一个不同于零的小数字以避免简单的解决方案),但我不认为你可以用线性回归来解决整数奇偶校验问题。

关键是你在努力适应

x % 2

具有形式的预测

activation(x * w + b)

并且没有办法找到好的wb来解决这个问题。

理解这一点的另一种方法是绘制数据:x 奇偶性的散点图是两条点线,用一条线拟合它们的唯一方法是用一条平线(无论如何都会有很高的成本)。

我认为改变数据开始会更好,但如果你想解决这个问题,你应该使用正弦或余弦作为激活函数来获得一些结果。

关于python - Tensorflow 总是预测相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385805/

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