gpt4 book ai didi

python - 带有 TensorFlow 的简单前馈神经网络无法学习

转载 作者:太空狗 更新时间:2023-10-29 22:04:40 25 4
gpt4 key购买 nike

我正在尝试使用 TensorFlow 构建一个简单的神经网络。目标是在 32 像素 x 32 像素图像中找到矩形的中心。矩形由五个向量描述。第一个向量是位置向量,其他四个是方向向量,构成了矩形的边。一个向量有两个值(x 和 y)。

enter image description here

这张图片对应的输入是(2,5)(0,4)(6,0)(0,-4)(-6,0)。中心(以及所需的输出)位于 (5,7)

我想出的代码如下所示:

    import tensorflow as tf     import numpy as np    import Rectangle_Records    def init_weights(shape):        """ Weight initialization """        weights = tf.random_normal(shape, stddev=0.1)        return tf.Variable(weights)    def forwardprop(x, w_1, w_2):        """ Forward-propagation """        h = tf.nn.sigmoid(tf.matmul(x, w_1))        y_predict = tf.matmul(h, w_2)        return y_predict    def main():        x_size = 10        y_size = 2        h_1_size = 256        # Prepare input data        input_data = Rectangle_Records.DataSet()        x = tf.placeholder(tf.float32, shape = [None, x_size])        y_label = tf.placeholder(tf.float32, shape = [None, y_size])        # Weight initializations        w_1 = init_weights((x_size, h_1_size))        w_2 = init_weights((h_1_size, y_size))        # Forward propagation        y_predict = forwardprop(x, w_1, w_2)        # Backward propagation        cost = tf.reduce_mean(tf.square(y_predict - y_label))        updates = tf.train.GradientDescentOptimizer(0.01).minimize(cost)        # Run        sess = tf.Session()        init = tf.global_variables_initializer()        sess.run(init)        for i in range(200):            batch = input_data.next_batch(10)            sess.run(updates, feed_dict = {x: batch[0], y_label: batch[1]})        sess.close()    if __name__ == "__main__":        main()

遗憾的是,网络无法正常学习。结果差得太远了。例如,[[ 3.74561882 , 3.70766664]] 应该在 [[ 3. , 7.]] 附近。我究竟做错了什么?

最佳答案

主要问题是你的整个训练只针对一个epoch进行,这还不够训练。尝试以下更改:

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for j in range(30):
input_data = Rectangle_Records.DataSet()
for i in range(200):
batch = input_data.next_batch(10)
loss, _ = sess.run([cost,updates], feed_dict = {x: batch[0], y_label: batch[1]})

pred = sess.run(y_predict, feed_dict={x: batch[0]})
print('Cost:', loss )
print('pred:', pred)
print('actual:', batch[1])
sess.close()

将优化器更改为动量优化器以加快收敛速度​​:tf.train.AdamOptimizer(0.01).minimize(cost)

关于python - 带有 TensorFlow 的简单前馈神经网络无法学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062193/

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