tensorflow学习笔记(一)——《案例:自实现线性回归》代码校正调整

2022-05-09 19:06:15 浏览数 (1)

快速阅读

  • 1.环境说明
  • 2.代码报错修改
    • `No1`.tf.random_normal报错问题
    • `No2.`GradientDescentOptimizer
    • `No3`.会话开启方式
    • `No.4` optimizer报错
  • 3.总结
  • 4.完整代码
  • 5.其他学习资料

1.环境说明

环境名称

我自己的环境

视频教程环境

系统环境

windows10

macOS

IDE解释器

pycharm

pycharm

tensorflow系统

CPU

CPU

tensorflow版本

2.2.0

1.8

2.代码报错修改

No1.tf.random_normal报错问题

tensorflow2.x版本里改为了tf.random.normal

代码语言:javascript复制
# 1) 准备数据
X = tf.random.normal(shape=[100, 1])
# X = tf.random_normal(shape=[100, 1])
y_true = tf.matmul(X, [[0.8]]) 0.7

# 2) 构造模型
# 定义模型参数 用变量
weights = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
bias = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
y_predict = tf.matmul(X, weights)   bias

No2.GradientDescentOptimizer

代码语言:javascript复制
 #报错: 
 AttributeError: module 'tensorflow_core._api.v2.train' has no attribute 'GradientDescentOptimizer'
 #原代码:
 tf.train.GradientDescentOptimizer(learning_rate=0.01)
 #改为:
 tf.compat.v1.train.GradientDescentOptimizer(learn_rate=0.01)

No3.会话开启方式

Tensorflow 2.0版本中已经移除了Session这一模块,改换运行代码 tf.compat.v1.Session()

代码语言:javascript复制
#AttributeError: module 'tensorflow' has no attribute 'Session'
# 开启会话
with tf.compat.v1.Session() as sess:
	 # 初始化向量
	 sess.run(init)
	 # 查看初始化模型参数之后的值
	 print("训练前模型参数为:权重 %f,偏置%f" % (weights.eval(), bias.eval()))

No.4 optimizer报错

原理详见文章:Tensorflow 2 错误处理

代码语言:javascript复制
#报错
RuntimeError: `loss` passed to Optimizer.compute_gradients should be a function when eager execution
#在下句代码之前 
#optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#添加tf.compat.v1.disable_eager_execution()

#更改后代码

tf.compat.v1.disable_eager_execution()
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)

3.总结

本来想着与时俱进,这个tf2.x进的太多了,墙裂不建议新手安装2.x,尤其 是 你的教程版本是1.x的 情况,如果不幸安装了2.x,又不想卸载重装的话(反正我是不想卸载重装,装了好几次才整个不知道什么原因),执行不了的语句(如果实在找不到原因)都用tf.compat.v1切成1.x吧!好像还挺好使的

4.完整代码

代码语言:javascript复制
import tensorflow as tf

def linear_regression():
    """
    自实现一个线性回归
    :return:
    """
    # 1) 准备数据
    X = tf.random.normal(shape=[100, 1])
    # X = tf.random_normal(shape=[100, 1])
    y_true = tf.matmul(X, [[0.8]]) 0.7

    # 2) 构造模型
    # 定义模型参数 用变量
    weights = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
    bias = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
    y_predict = tf.matmul(X, weights)   bias

    # 3) 构造损失函数
    error = tf.reduce_mean(tf.square(y_predict - y_true))

    # 4) 优化损失
    tf.compat.v1.disable_eager_execution()
    optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)

    # 显示初始化变量
    init = tf.compat.v1.global_variables_initializer()

    # 开启会话
    with tf.compat.v1.Session() as sess:
        # 初始化向量
        sess.run(init)

        # 查看初始化模型参数之后的值
        print("训练前模型参数为:权重 %f,偏置%f" % (weights.eval(), bias.eval()))
    return None


if __name__ == "__main__":
    linear_regression()

5.其他学习资料

① tensorflowAPI文档 ② tf.global_variables_initializer()什么时候用?


写在最后的最后,报错太多了,我决定还是卸载掉,重装个1.8了,改的要哭了,学习进度几乎为 0

0 人点赞