当前位置: 首页 > 知识库问答 >
问题:

简单的前馈神经网络与TensorFlow不会学习

柯易安
2023-03-14

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

该图像的相应输入为(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.]]时。我做错了什么?

共有3个答案

商畅
2023-03-14

有很多方法可以提高神经网络的性能。请尝试以下一项或多项操作:

  1. 添加更多层,或每层添加更多节点
  2. 更改激活功能(我发现relu非常有效)
  3. 使用NN的集合,其中每个NN通过其R^2得分获得加权投票
  4. 引入更多培训数据
  5. 执行网格搜索以优化参数
轩辕海
2023-03-14

你忘了添加偏见。

def init_bias(shape):
    biases = tf.random_normal(shape)
    return tf.Variable(biases)

def forwardprop(x, w_1, w_2, b_1, b_2):
    """ Forward-propagation """
    h = tf.nn.sigmoid(tf.matmul(x, w_1) + b_1)
    y_predict = tf.matmul(h, w_2) + b_2
    return y_predict

把它改成这个

w_1 = init_weights((x_size, h_1_size))
w_2 = init_weights((h_1_size, y_size))
b_1 = init_bias((h_1_size,))
b_2 = init_bias((y_size,))

# Forward propagation
y_predict = forwardprop(x, w_1, w_2, b_1, b_2)

这将给你更好的准确性。然后,您可以尝试添加更多层,尝试不同的激活功能等,以进一步改进。

子车飞文
2023-03-14

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

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)。最小化(成本)

 类似资料:
  • 本文向大家介绍TensorFlow实现简单卷积神经网络,包括了TensorFlow实现简单卷积神经网络的使用技巧和注意事项,需要的朋友参考一下 本文使用的数据集是MNIST,主要使用两个卷积层加一个全连接层构建的卷积神经网络。 先载入MNIST数据集(手写数字识别集),并创建默认的Interactive Session(在没有指定回话对象的情况下运行变量) 在定义一个初始化函数,因为卷积神经网络有

  • 我正在建立一个简单的神经网络。数据是一个231长的向量,它是一个热编码的向量。每个231个长向量被分配一个8个长的热编码标签。 到目前为止,我的代码是: 问题是输出层是8个单位,但是我的标签不是单个单位,它们是一个热编码的8个长矢量。如何将此表示为输出? 错误消息是: 无法用非浮点dtype构建密集层 完全回溯:

  • 我经常读到,前馈和递归神经网络(RNNs)之间存在着根本的区别,这是由于前馈网络缺乏内部状态和短期记忆。乍一看,我觉得这似乎有理。 然而,当学习一个递归神经网络的反向传播通过时间算法时,递归网络转化为等价的前馈网络,如果我理解正确的话。 这就意味着,事实上没有根本的区别。为什么RNN在某些任务(图像识别、时间序列预测等)中比深度前馈网络表现得更好?

  • 本文向大家介绍tensorflow学习笔记之简单的神经网络训练和测试,包括了tensorflow学习笔记之简单的神经网络训练和测试的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下 刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始。

  • 本文向大家介绍TensorFlow神经网络优化策略学习,包括了TensorFlow神经网络优化策略学习的使用技巧和注意事项,需要的朋友参考一下 在神经网络模型优化的过程中,会遇到许多问题,比如如何设置学习率的问题,我们可通过指数衰减的方式让模型在训练初期快速接近较优解,在训练后期稳定进入最优解区域;针对过拟合问题,通过正则化的方法加以应对;滑动平均模型可以让最终得到的模型在未知数据上表现的更加健壮

  • 神经网络和深度学习是一本免费的在线书。本书会教会你: 神经网络,一种美妙的受生物学启发的编程范式,可以让计算机从观测数据中进行学习 深度学习,一个强有力的用于神经网络学习的众多技术的集合 神经网络和深度学习目前给出了在图像识别、语音识别和自然语言处理领域中很多问题的最好解决方案。本书将会教你在神经网络和深度学习背后的众多核心概念。 想了解本书选择的观点的更多细节,请看这里。或者直接跳到第一章 开始