Python人工智能 | 三.TensorFlow基础及一元直线预测案例
文章目录:
一.神经网络前言
二.TensorFlow结构及工作原理
三.TensorFlow实现一元直线预测
四.总结
https://github.com/eastmountyxz/
AI-for-TensorFlowhttps://github.com/eastmountyxz/
AI-for-Keras
学Python近八年,认识了很多大佬和朋友,感恩。由于在外求学且需要养娃,故在CSDN设置成了最低价收费专栏,觉得不错的可以购买抬爱;但作者的本意是帮助更多初学者入门,因此在github开源了所有代码,也在公众号同步更新。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,也能在读博几年里学会真正的独立科研。同时非常感谢参考文献中的大佬们的文章和分享,共勉。
- https://blog.csdn.net/eastmount
一.神经网络前言
二.TensorFlow结构及原理
三.TensorFlow一元直线预测
[0.42128456 0.3590797 0.31952253 0.54071575 0.4098252 0.87536865
0.58871204 0.37161928 0.30826327 0.94290715 0.40412208 0.47935355
...
0.00465394 0.0929272 0.18561055 0.8577836 0.6737635 0.04606532
0.8738483 0.9900948 0.13116711 0.299359 ]
[0.34212846 0.335908 0.33195227 0.3540716 0.34098253 0.38753688
0.35887122 0.33716193 0.33082634 0.39429075 0.34041223 0.34793538
...
0.3004654 0.30929273 0.31856108 0.38577837 0.36737636 0.30460656
0.38738483 0.3990095 0.31311673 0.3299359 ]
<tf.Variable 'Variable_28:0' shape=(1,) dtype=float32_ref>
<tf.Variable 'Variable_29:0' shape=(1,) dtype=float32_ref>
TensorFlow1.0:
optimizer = tf.train.GradientDescentOptimizer(0.5)
TensorFlow2.0:
optimizer = tf.optimizers.SGD(learning_rate=0.5)
# 定义Session
sess = tf.Session()
# 运行时Session就像一个指针 指向要处理的位置并激活
sess.run(init)t
# 训练201次
for n in range(201):
# 训练并且每隔20次输出结果
sess.run(train)
if n % 20 == 0:
# 最佳拟合结果 W: [0.100], b: [0.300]
print(n, sess.run(Weights), sess.run(biases))
0 [-0.17100081] [0.60644317]
20 [0.00904198] [0.34798568]
40 [0.07555631] [0.31289548]
60 [0.09343112] [0.3034655]
80 [0.09823472] [0.3009313]
100 [0.09952562] [0.3002503]
120 [0.09987252] [0.30006728]
140 [0.09996576] [0.30001807]
160 [0.09999081] [0.30000487]
180 [0.09999753] [0.30000132]
200 [0.09999932] [0.30000037]
# -*- coding: utf-8 -*-
"""
Created on 2019-11-30 下午6点 写于武汉大学
@author: Eastmount CSDN YXZ
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import time
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3 #权重0.1 偏置0.3
#------------------开始创建tensorflow结构------------------
# 权重和偏置
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1]))
# 预测值y
y = Weights * x_data + biases
# 损失函数
loss = tf.reduce_mean(tf.square(y-y_data))
# 建立神经网络优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5) #学习效率
train = optimizer.minimize(loss)
# 初始化变量
init = tf.global_variables_initializer()
#------------------结束创建tensorflow结构------------------
# 定义Session
sess = tf.Session()
# 运行时Session就像一个指针 指向要处理的位置并激活
sess.run(init)
# 训练并且每隔20次输出结果
for n in range(201):
sess.run(train)
if n % 20 == 0:
print(n, sess.run(Weights), sess.run(biases))
pre = x_data * sess.run(Weights) + sess.run(biases)
# 可视化分析
plt.scatter(x_data, y_data)
plt.plot(x_data, pre, 'r-')
plt.show()
输出结果如下图所示,权重从最初的随机数0.3913201,逐渐优化成目标0.1;偏置从最初的随机数0.19479582,逐步优化到0.3,通过不断地学习和训练。
8.可视化对比多张效果图的完整代码
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 1 20:00:14 2019
@author: xiuzhang Eastmount
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3 #权重0.1 偏置0.3
#------------------开始创建tensorflow结构------------------
# 权重和偏置
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.Variable(tf.zeros([1]))
# 预测值y
y = Weights * x_data + biases
# 损失函数
loss = tf.reduce_mean(tf.square(y-y_data))
# 建立神经网络优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5) #学习效率
train = optimizer.minimize(loss)
# 初始化变量
init = tf.global_variables_initializer()
#------------------结束创建tensorflow结构------------------
# 可视化
plt.plot(x_data, y_data,'ro', marker='^', c='blue',label='original_data')
plt.legend()
plt.show()
# 定义Session
sess = tf.Session()
# 运行时Session就像一个指针 指向要处理的位置并激活
sess.run(init)
# 训练并且每隔20次输出结果
k = 0
for n in range(200):
sess.run(train)
if n % 20 == 0:
print(n, sess.run(Weights), sess.run(biases))
pre = x_data * sess.run(Weights) + sess.run(biases)
# 可视化分析
k = k + 1
plt.subplot(5, 2, k)
plt.plot(x_data, y_data, 'ro')
plt.plot(x_data, pre, label=k)
plt.legend()
plt.show()
输出结果如下图所示:
四.总结
写到这里,这篇基础性的TensorFlow文章就讲述完毕。它通过不断地训练和学习,将预测结果与实际曲线y=0.1*x+0.3向匹配,这是非常基础的一篇深度学习文章,同时文章中存在错误或不足之处,还请海涵~
同时,作为人工智能的菜鸟,我希望自己能不断进步并深入,后续将它应用于图像识别、网络安全、对抗样本等领域,一起加油!女神晚上收到了又一封家书,道不尽的思恋,读博不易,写文也不易,且行且珍惜。
前文分享(可以点击喔):
天行健,君子以自强不息。
地势坤,君子以厚德载物。
真诚地感谢您关注“娜璋之家”公众号,也希望我的文章能陪伴你成长,希望在技术路上不断前行。文章如果对你有帮助、有感悟,就是对我最好的回报,且看且珍惜!再次感谢您的关注,也请帮忙宣传下“娜璋之家”,初来乍到,还请多指教。
(By:Eastmount 2021-06-20 夜于武汉)
参考文献,感谢各位大神的文章和视频,推荐大家跟着莫烦老师学习,他是我人工智能的入门老师。
[1] 神经网络和机器学习基础入门分享 - 作者的文章
[2] 斯坦福机器学习视频NG教授:
https://class.coursera.org/ml/class/index[3] 书籍《游戏开发中的人工智能》
[4] 网易云莫烦老师视频(强推):
https://study.163.com/course/courseLearn.htm?courseId=1003209007[5] 神经网络激励函数 - deeplearning
[6] tensorflow架构 - NoMorningstar
[7] 《TensorFlow2.0》低阶 api 入门 - GumKey
[8] https://tensorflow.google.cn/overview/
[9] http://playground.tensorflow.org/
[10] https://www.tensorflow.org/versions/
r2.0/api_docs/python/tf/optimizers