快速阅读
- 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