gpt4 book ai didi

python - 模型无法在 tensorflow 中学习

转载 作者:行者123 更新时间:2023-11-30 09:36:57 24 4
gpt4 key购买 nike

我是 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 个数据点来说非常非常糟糕,所以我认为它没有学习。

我的问题:我的机器学习是吗?如果是这样,我该怎么做才能使其更准确?如果没有,我怎样才能让它学习?

最佳答案

代码存在一些主要问题。 Aaron 已经识别出其中的一些,但还有另一个重要的: calculated_outputcorrect_answers形状不同,因此在减去它们时会创建一个二维矩阵。 ( calculated_output 的形状是 (100, 1) , correct_answers 的形状是 (100) 。)因此您需要调整形状(例如,在 tf.squeeze 上使用 calculated_output )。

这个问题实际上并不需要任何非线性,因此您可以在没有激活且只有一层的情况下完成。以下代码的总误差约为 6(每个测试点的平均误差约为 0.06)。希望有帮助!

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 = tf.placeholder(tf.float32, shape=[None, 2])
correct_answers = tf.placeholder(tf.float32, shape=[None])

weights_1 = tf.Variable(tf.truncated_normal([2, 1], stddev=.1))
bias_1 = tf.Variable(.0)

output_layer = tf.matmul(input_data, weights_1) + bias_1

mean_squared = tf.reduce_mean(tf.square(correct_answers - tf.squeeze(output_layer)))
optimizer = tf.train.GradientDescentOptimizer(.1).minimize(mean_squared)

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(tf.squeeze(output_layer) - correct_answers))

x, y = generate_data(100)
print("Total Error: ", error.eval(feed_dict={input_data: x, correct_answers: y}))

关于python - 模型无法在 tensorflow 中学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com