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

我正在尝试一个非常简单的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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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