【问题标题】:Why aren't my weights being updated?为什么我的体重没有更新?
【发布时间】:2018-02-21 05:30:37
【问题描述】:

我正在尝试这个非常简单的神经网络,它可以判断一个数字是奇数还是偶数。 标签: [1, 0] 表示它是偶数。我使用了两个输出神经元,因为我使用的是 softmax 函数。

我的代码:

import tensorflow as tf

data_in = [
            [1],
            [2],
            [3]
            ]
data_lbl = [
            [0, 1],
            [1, 0],
            [0, 1]
            ]


# HP

learning_rate = 0.1
epochs = 10000

ip = tf.placeholder('float', [None, 1])
labels = tf.placeholder('float', [None, 2])
w1 = tf.Variable(tf.random_normal([1, 2]))
w2 = tf.Variable(tf.random_normal([2, 2]))

l1 = tf.matmul(ip, w1)
l2 = tf.matmul(l1, w2)
l2 = tf.nn.softmax(l2)

loss = tf.reduce_mean((labels - l2)**2)
train = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

sess = tf.Session()

sess.run(tf.global_variables_initializer())

for epoch in range(epochs):
    _, err = sess.run([train, loss], feed_dict={ip: data_in, labels: data_lbl})
    print(err)

print(sess.run(l2, feed_dict={ip: [[2], [5], [7]]}))
# [it is, it's not]
# 1 = even

sess.close()

我的错误没有改变,我得到了错误的答案。有什么建议吗?

【问题讨论】:

  • 数字的奇偶校验对于神经网络来说不是一个容易解决的问题。您是否先尝试过其他问题?就像一个简单的与门?你的训练集也很小,而且是硬编码的。您可以相当轻松地使用函数来生成训练数据,从而将网络暴露给更多场景。
  • 另外你的隐藏层没有任何激活函数。

标签: machine-learning tensorflow neural-network artificial-intelligence


【解决方案1】:

你有多个问题,解决这些问题至少应该让你学到一些东西一些东西

  • 除了最终的 softmax 之外,您的网络中没有任何非线性。您需要非线性,因为奇偶校验不是线性函数。
  • 您的中间层非常小。
  • 您的训练样本非常有限。
  • 你没有偏见。

此外,奇偶校验是一个很难学习的概念,因此它可以推广到训练集中没有看到的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2011-10-10
    • 2018-03-13
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多