TensorFlow—上手篇
TensorFlow—上手篇
1,关于import tensorflow的报错问题:
根据显示的文件路径找到相应的文件,采用sublime_text编辑(因为用这个可以看到行号,用其他的文本编辑也可以显示行号找到对应位置即可),找到行号为523的位置,将如下内容:
_np_qint8 = np.dtype([(“qint8”, np.int8, 1)])
修改为:
_np_qint8 = np.dtype([(“qint8”, np.int8, (1,))])
2,关于tensorflow的结构概念问题:
定义如下:
使用图(graphs)来表示计算任务
在被称之为会话(Session)的上下文(context)中执行图
使用tensor表示数据
通过变量(Variable)维护状态
使用feed和fetch可以为任意的操作赋值或者从其中获取数据
tensorflow主要由4个部分组成,Tensor数据层,variable变量层,operation操作层,以上三层组合为graph,最后将graph封装在Session图中。
具体的栗子如下:
构造2个矩阵作为tensor层,乘法作为操作层,结果的计算作为graph,用默认的Session图封装并调用。
#导入tensorflow库
import tensorflow as tf
#定义2个矩阵作为tensor数据层
m1=tf.constant([[2,3]])
m2=tf.constant([[2],[3]])
#调用matmul作为operation操作层,并且pro作为gragh
pro=tf.matmul(m1,m2)
#采用Session默认图,通过ss封装并调用graph(pro)
with tf.Session() as ss:
res=ss.run(pro)
print(res)
最终显示结果为:
[[13]]
3,关于Variable的语法问题:
1.如何进行variable的赋值?
采用tensorflow.Variable()赋值:
import tensorflow as tf
#定义一个自变量x1
x1=tf.Variable([2,3])
#定义一个常量m1
m1=tf.constant([2,3])
#定义一个op减法
op1=tf.subtract(x1,m1)
#定义一个op加法
op2=tf.add(x1,op1)
#初始化全局变量
init=tf.global_variables_initializer()
#使用默认图Session()
with tf.Session() as sess:
sess.run(init)
print(sess.run(op1))
print(sess.run(op2))
显示结果为:
[0 0] [2 3]
2.使用tensorflow实现累加操作?
采用tensorflow.assign()进行赋值更新操作:
#实现0~5的自加
x2=tf.Variable(0)
m2=tf.constant(1)
res=tf.add(x2,m2)
#使用assign()进行赋值的更新
update=tf.assign(x2,res)
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for _ in range(5):
sess.run(update)
print(sess.run(x2))
显示结果为:
1 2 3 4 5
3.思考题?
如果将print(sess.run(x2))改为print(sess.run(res)),或者print(sess.run(update))的显示结果是什么?
print(sess.run(res))的显示结果为:2 3 4 5 6
原因在于:每次多加了一个m2。
print(sess.run(update))的显示结果为:2 4 6 8 10
原因在于:每次多加了一个m2的基础上还多加了之前上一轮的x2。
4,fetch和feed是什么东西?
fetch,主要用于一次运行多个op:
而feed是什么呢?
feed,用于在调用graph时再向op输入实参,与fetch需要提前输入实参不同:
#fetch
in1=tf.placeholder(tf.int32)
in2=tf.placeholder(tf.int32)
op1=tf.multiply(in1,in2)
#init=tf.global_variables_initializer()
with tf.Session() as sess:
#sess.run(init)
#feed数据以字典形式传入
print(sess.run(op1,feed_dict={in1:21,in2:23}))
4,如何写一个简单的二次函数训练模型?
1.原始数据x_data采用numpy.random.rand()随机生成。
2.y_data采用自定义(得到精准的k,b),以及对k,b进行变量类型的定义。
3.写出预测值y,k,b,x_data之间的函数关系式。
4.定义损失代价函数loss。
5.定义梯度下降优化器,设置学习率(0<学习率<1)。
6.最小化代价函数optimizer.minimize(loss)。
7.初始化全局变量,k和b。
8.使用默认图Session(),调用graph成员cost,进行重复训练。
9.每训练30次,打印k和b,以及loss的值。
#梯度下降训练线性模型
x_data=np.random.rand(100)
y_data=0.1*x_data*x_data+0.2
k=tf.Variable(0.)
b=tf.Variable(0.)
y=k*x_data*x_data+b
#定义二次损失代价函数
loss=tf.reduce_mean(tf.square(y-y_data))
#定义优化器
optimizer=tf.train.GradientDescentOptimizer(0.3)#0.3作为梯度下降的学习率
#最小化代价函数
cost=optimizer.minimize(loss)
#初始化变量
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for _ in range(300):
sess.run(cost)
if _%30==0:
print(_,sess.run([k,b,loss]))
训练结果如下:
推荐阅读
-
tensorflow教程推荐(新手必知的tensorflow基础知识)
-
.NETCore C# 中级篇2-6 Json与XML
-
详细介绍如何用TensorFlow实现yolo v3 macOS
-
《深度探索C++对象模型》之《构造函数语义学》——Default Constructor篇
-
.NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
-
公众号大神咪蒙都写了些什么内容(70篇文章赚了近百万粉丝)
-
《参与感:小米口碑营销内部手册》读后感-企业管理篇
-
软文营销:手把手教你写一篇带有营销推广性质的高质量软文
-
来自百度的良心产品!百度iOS截长图App上手:方便至极
-
Asp.Net实现FORM认证的一些使用技巧(必看篇)