为什么我的权重没有被更新?

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

我的代码如下:

import tensorflow as tfdata_in = [            [1],            [2],            [3]            ]data_lbl = [            [0, 1],            [1, 0],            [0, 1]            ]# HPlearning_rate = 0.1epochs = 10000ip = 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 = evensess.close()

我的误差没有变化,并且我得到的答案是错误的。有什么建议吗?


回答:

你这里有多个问题,解决这些问题至少能让你学到一些东西:

  • 你的网络中除了最后的softmax之外没有非线性。你需要非线性,因为奇偶性不是一个线性函数。
  • 你的中间层非常小。
  • 你的训练样本非常有限。
  • 你没有使用偏置项。

此外,奇偶性是一个很难学习的概念,因此它很难推广到训练集中未见过的数字。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注