【发布时间】:2016-05-15 22:08:07
【问题描述】:
我是 tensorflow 和神经网络的新手,我正在尝试创建一个仅将两个浮点值相乘的模型。
我不确定我想要多少个神经元,但我选择了 10 个神经元并试图看看我可以从哪里开始。我认为这可能会引入足够的复杂性,以便半准确地学习该操作。
无论如何,这是我的代码:
import tensorflow as tf
import numpy as np
# Teach how to multiply
def generate_data(how_many):
data = np.random.rand(how_many, 2)
answers = data[:, 0] * data[:, 1]
return data, answers
sess = tf.InteractiveSession()
# Input data
input_data = tf.placeholder(tf.float32, shape=[None, 2])
correct_answers = tf.placeholder(tf.float32, shape=[None])
# Use 10 neurons--just one layer for now, but it'll be fully connected
weights_1 = tf.Variable(tf.truncated_normal([2, 10], stddev=.1))
bias_1 = tf.Variable(.1)
# Output of this will be a [None, 10]
hidden_output = tf.nn.relu(tf.matmul(input_data, weights_1) + bias_1)
# Weights
weights_2 = tf.Variable(tf.truncated_normal([10, 1], stddev=.1))
bias_2 = tf.Variable(.1)
# Softmax them together--this will be [None, 1]
calculated_output = tf.nn.softmax(tf.matmul(hidden_output, weights_2) + bias_2)
cross_entropy = tf.reduce_mean(correct_answers * tf.log(calculated_output))
optimizer = tf.train.GradientDescentOptimizer(.5).minimize(cross_entropy)
sess.run(tf.initialize_all_variables())
for i in range(1000):
x, y = generate_data(100)
sess.run(optimizer, feed_dict={input_data: x, correct_answers: y})
error = tf.reduce_sum(tf.abs(calculated_output - correct_answers))
x, y = generate_data(100)
print("Total Error: ", error.eval(feed_dict={input_data: x, correct_answers: y}))
似乎错误总是在 7522.1 左右,这对于仅 100 个数据点来说非常非常糟糕,所以我认为它不是在学习。
我的问题:我的机器学习了吗?如果是这样,我该怎么做才能使其更准确?如果没有,我怎样才能让它学习?
【问题讨论】:
标签: python machine-learning neural-network tensorflow