import tensorflow as tf # 定义数据流图 learning_rate_ = tf.placeholder(dtype=tf.float32) X_ = tf.placeholder(dtype=tf.float32, shape=[5]) y_ = tf.placeholder(dtype=tf.float32, shape=[5]) a = tf.get_variable('a', dtype=tf.float32, shape=[], initializer=tf.zeros_initializer) b = tf.get_variable('b', dtype=tf.float32, shape=[], initializer=tf.zeros_initializer) y_pred = a * X_ + b loss = tf.constant(0.5) * tf.reduce_sum(tf.square(y_pred - y_)) # 反向传播,手动计算变量(模型参数)的梯度 grad_a = tf.reduce_sum((y_pred - y_) * X_) grad_b = tf.reduce_sum(y_pred - y_) # 梯度下降法,手动更新参数 new_a = a - learning_rate_ * grad_a new_b = b - learning_rate_ * grad_b update_a = tf.assign(a, new_a) update_b = tf.assign(b, new_b) train_op = [update_a, update_b] # 数据流图定义到此结束 # 注意,直到目前,我们都没有进行任何实质的数据计算,仅仅是定义了一个数据图 num_epoch = 10000 learning_rate = 1e-3 with tf.Session() as sess: # 初始化变量a和b tf.global_variables_initializer().run() # 循环将数据送入上面建立的数据流图中进行计算和更新变量 for e in range(num_epoch): sess.run(train_op, feed_dict={X_: X, y_: y, learning_rate_: learning_rate}) print(sess.run([a, b]))
以下代码显示了基于符号编程方法如何完成与上一节相同的任务。其中,tf.()可以看成是一个“符号输入节点”,使用tf.()定义模型的参数(张量类型可以使用tf.()操作赋值),sess .run( , ={: data}) 可以看作是向输入节点发送数据,沿着计算图计算到达输出节点并返回值的过程。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容