使用Tensorflow学习两个数字的和

我正在尝试训练一个神经网络来预测两个数字的和。但是我不明白我的模型有什么问题。模型由2个输入层、2个隐藏层和1个输出层组成。每1000次迭代我会打印一次测试执行结果,但结果却越来越小。

import numpy as npimport tensorflow as tfinput_size = 2hidden_size = 3out_size = 1def generate_test_data():    inp = 0.5*np.random.rand(10, 2)    oup = np.zeros((10, 1))    for idx, val in enumerate(inp):        oup[idx] = np.array([val[0] + val[1]])    return inp, oupdef create_network():    x = tf.placeholder(tf.float32, [None, input_size])    w01 = tf.Variable(tf.truncated_normal([input_size, hidden_size], stddev=0.1))    y1 = tf.sigmoid(tf.matmul(tf.sigmoid(x), w01))    w12 = tf.Variable(tf.truncated_normal([hidden_size, out_size], stddev=0.1))    y2 = tf.sigmoid(tf.matmul(y1, w12))    y_ = tf.placeholder(tf.float32, [None, out_size])    return x, y_, y2def train(x, y_, y2):    cross_entropy = tf.reduce_mean(        tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y2)    )    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)    sess = tf.InteractiveSession()    tf.global_variables_initializer().run()    # Train    for i in range(100000):        batch_xs, batch_ys = generate_test_data()        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})        # Test        if i % 1000 == 0:            out_batch = sess.run(y2, {x: batch_xs})            inx = 0            print(batch_xs[inx][0], " + ", batch_xs[inx][1], " = ", out_batch[inx][0])(x, y_, y2) = create_network()train(x, y_, y2)

每1000次迭代的输出:

0.37301352864927173  + 0.28949461772342683  = 0.491115180.050899466843458474 + 0.006174158992116541 = 0.00252607440.3974852369427063   + 0.22402098418952499  = 0.000908285440.15735921047969498  + 0.39645077887600294  = 0.00059037270.23560825884336228  + 0.29010766384718145  = 0.00043178830.4250063393420791   + 0.24181166029062096  = 0.00031525563                                            = smaller and smaller

回答:

交叉熵损失用于分类问题,而你的任务显然是回归问题。计算的cross_entropy值没有意义,因此导致了这样的结果。

将你的损失函数改为:

cross_entropy = tf.reduce_mean(    tf.nn.l2_loss(y_ - y2))

…你会看到更加合理的结果。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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