反向传播在 Tensorflow 中不起作用

WangYang

我是 Tensorflow 的大一新生。最近我想用一个两层神经网络模型拟合一个非线性函数“y = 1 + sin(x * pi/4)”。程序代码如下:

    #!/usr/bin/python

    import tensorflow as tf
    import numpy as np
    import math
    import matplotlib.pyplot as plt

    def check_mode():
        x_data = np.linspace(-2,2,100)
        y_data = [1 + math.sin(x  * math.pi/4) for x in x_data]
        w_1 = tf.Variable(tf.random_uniform([1,2],0,0.5))
        b_1 = tf.Variable(tf.random_uniform([1,2],0,0.5))
        w_2 = tf.Variable(tf.random_uniform([2,1],0,0.5))
        b_2 = tf.Variable(tf.random_uniform([1,1],0,0.5))
        saver = tf.train.Saver()
        with tf.Session() as sess:
            saver.restore(sess,"mode.ckpt")
            print("lay1: ",sess.run(w_1),sess.run(b_1))
            print("lay2: ",sess.run(w_2),sess.run(b_2))
            a = []
            for x_i in x_data:
                w_plus_b = tf.matmul([[x_i]],w_1) + b_1
                a_1 = sigma(w_plus_b)
                a_2 = tf.matmul(a_1,w_2) + b_2
                a.append(sess.run(a_2[0][0]))
        print a
        draw_point(a,x_data,y_data)
        return
    def draw_point(a,x_data,y_data):
        fx,ax = plt.subplots()
        plt.plot(x_data,y_data,'o-')
        plt.plot(x_data,a,'k-')
        plt.show()  


    def sigma(x):
        return tf.div(tf.constant(1.0),tf.add(tf.constant(1.0),tf.exp(tf.negative(x))))

    def first_function():
        x_data = np.linspace(-2,2,100)
        y_data = [1 + math.sin(x  * math.pi/4) for x in x_data]

        x_i = tf.placeholder(tf.float32,[1,1])
        y_data_i = tf.placeholder(tf.float32,[1,1])

        w_1 = tf.Variable(tf.random_uniform([1,2],0,0.5))
        b_1 = tf.Variable(tf.random_uniform([1,2],0,0.5))

        w_2 = tf.Variable(tf.random_uniform([2,1],0,0.5))
        b_2 = tf.Variable(tf.random_uniform([1,1],0,0.5))

        z_1 = tf.add(tf.matmul(x_i,w_1), b_1)
        a_1 = sigma(z_1)
        a_2 = tf.add(tf.matmul(a_1,w_2),b_2)
        diff = tf.subtract(a_2,y_data_i)    

        loss = tf.multiply(diff,diff)

        optimizer = tf.train.GradientDescentOptimizer(0.1)
        train = optimizer.minimize(loss)

        init = tf.initialize_all_variables()

        sess = tf.Session()
        sess.run(init)
        saver = tf.train.Saver()
        for step in range(100):
            sess.run(train,feed_dict={x_i:[[x_data[step]]],y_data_i:[[y_data[step]]]})

        print("lay1: ",sess.run(w_1),sess.run(b_1))
        print("lay2: ",sess.run(w_2),sess.run(b_2))
        saver.save(sess,"mode.ckpt")
        return

    def main():
        #first_function()
        check_mode()
        return

    if __name__ == '__main__':
        main()

我不确定张量流是否以及如何自动完成反向传播?我真的不想自己实现反向传播。我的代码有问题吗?非常非常感谢您的帮助!!

安东代码

看起来它确实完成了背部支柱,但看起来你并没有对它进行很多训练。具体来说,您的训练循环仅通过每个数据点一次。尝试通过数据进行多次循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tensorflow中的LSTM反向传播

来自分类Dev

Tensorflow中的反向传播(经过时间)代码

来自分类Dev

Tensorflow.js神经网络中的反向传播

来自分类Dev

反向传播不起作用:神经网络Java

来自分类Dev

Gradcam带制导的反向传播器,用于Tensorflow 2.0中的转移学习

来自分类Dev

通过rnn ValueError进行Tensorflow反向传播

来自分类Dev

神经网络反向传播算法在Python中不起作用

来自分类Dev

弹性反向传播中的错误?

来自分类Dev

反向传播中的梯度检查

来自分类Dev

TensorFlow不起作用

来自分类Dev

TensorFlow的镜像策略,批量大小和反向传播

来自分类Dev

Neuroph:多层感知器反向传播学习不起作用

来自分类Dev

反向传播算法中的权重更新

来自分类Dev

在反向传播中更新前几层的权重

来自分类Dev

PyTorch中的截断的反向传播(代码检查)

来自分类Dev

反向传播中的Gradient函数如何工作?

来自分类Dev

神经网络中的反向传播偏差

来自分类Dev

反向熵,Softmax和反向传播中的导数项

来自分类Dev

分组,汇总,在R中传播不起作用

来自分类Dev

数组的反向不起作用

来自分类Dev

反向签名不起作用

来自分类Dev

反向xpath不起作用

来自分类Dev

Kile(Ubuntu 13.10)中的反向搜索不起作用

来自分类Dev

python3-cd在反向shell中不起作用

来自分类Dev

Kile(Ubuntu 13.10)中的反向搜索不起作用

来自分类Dev

Nextcloud共享在Nginx反向代理中不起作用

来自分类Dev

IIS 反向代理在 Azure Web App 中不起作用

来自分类Dev

活化衍生物在反向传播中的使用

来自分类Dev

神经网络反向传播算法中的训练数据循环