Python Tensorflow总是预测相同的输出

Python Tensorflow总是预测相同的输出,python,machine-learning,tensorflow,neural-network,deep-learning,Python,Machine Learning,Tensorflow,Neural Network,Deep Learning,所以,我试图学习tensorflow,为此,我尝试为一些我认为不太难的东西创建一个分类器。 我想预测一个数字是奇数还是偶数。 问题是Tensorflow总是预测相同的输出,我在过去几天搜索了答案,但没有任何帮助。。。 我看到以下答案: - - 这是我的密码: 在: 输出: (20,1) (20,1) 在: 输出: 在: 输出: 我试着玩我的超参数,比如学习速度或训练次数。 我将激活功能从softmax更改为relu。 我改变了我的数据框架以获得更多的示例,但什么也没发生。 我还尝试为我的权重添加

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

-

-

这是我的密码:

在:

输出:

(20,1) (20,1)

在:

输出:

在:

输出:

我试着玩我的超参数,比如学习速度或训练次数。 我将激活功能从softmax更改为relu。 我改变了我的数据框架以获得更多的示例,但什么也没发生。
我还尝试为我的权重添加随机值,但没有任何改变,成本刚刚开始上升。

通过快速查看代码,我觉得还可以(可能是将权重初始化为零的一部分,通常您需要一个与零不同的小数,以避免一个琐碎的解决方案),虽然我不认为你可以用线性回归来拟合整数奇偶性的问题

关键是你正在努力适应

x % 2
与形式的预测

activation(x * w + b)
没有办法找到好的
w
b
来解决这个问题

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


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

我看到的主要问题是你在W矩阵中用0初始化权重。在线性层中的操作基本上是Wx+b。因此,相对于x的梯度是W。如果你现在从W的0开始,那么梯度也是0,你不能学到任何东西。尝试使用tensorflow.org上所述的随机初始值

# Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")

首先,我必须承认我从未使用过tensorflow。但我认为你在这里有一个建模问题

您使用的是尽可能最简单的网络体系结构(一维)。您有两个要学习的变量(w和b),输出的决策规则如下所示

如果你减去b,再除以w,你得到

所以你基本上是在寻找一个阈值来区分奇数和偶数。无论你如何选择w和b,你总是会错分一半的数字


虽然判断一个数字是奇数还是偶数对我们人类来说似乎是一项极其琐碎的任务,但这不是一个单一的感知机所能完成的。

Tanks!我将尝试使用其他数据和随机起始权重。非常旧的问题/答案,但为什么初始化零权重会导致问题?我在这里贴了一个类似的问题:如果你有兴趣看一看。
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)
x % 2
activation(x * w + b)
# Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")