这里安装的问题我就不讲了,百度一大堆没必要我来说!
我是在jupyter
上运行的,不会用就百度吧。其实就是网页版灵活的更高的ipython
,ipython
也不知道的话也自己百度去。
下面看这个图,先来讲这三个东西。变量
、常量
、Tensor
。
image.png
变量
所谓变量就是可以变的量。跟a=1
差不多。看他们的类型tf.Variable
。
import tensorflow as tf
a=tf.Variable(1)
b=tf.Variable(1.)
c=tf.Variable([2,3])
print(a)
print(b)
print(c)
-----------------------------------------
<tf.Variable 'Variable_12:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_13:0' shape=() dtype=float32_ref>
<tf.Variable 'Variable_14:0' shape=(2,) dtype=int32_ref>
常量
就是一个常量,固定不变的数。
a=tf.constant(2)
b=tf.constant(2.)
c=tf.constant([2,3])
print(a)
print(b)
print(c)
-----------------------------------------
Tensor("Const_4:0", shape=(), dtype=int32)
Tensor("Const_5:0", shape=(), dtype=float32)
Tensor("Const_6:0", shape=(2,), dtype=int32)
ta是一个Tensor
类型,表示几维的数组(矩阵)。
1 #维度为0的标量
[1,2,3] #维度为1,一维向量
[[1,2],[3,4]] #维度为2, 二维矩阵
[[[1,2],[3,4]],[[1,2],[3,4]]] #维度为3,3维空间矩阵
那么问题来了,我这个a
、b
、c
里面存的数咋没print出来?
Session
一个执行器(为了方便理解,貌似只有我这么叫hhh)。你要把你的变量、常量、计算公式交给他,ta去算完给你个结果。
with tf.Session() as sess:
v1v= sess.run(tf.constant(2))
print(v1v)
-----------------------------------------
2
除了这种写法还有:
sess = tf.Session()
#通过session里面的run()函数来运行结果
print(sess.run(a))
#或者
print(a.eval(session=sess))
#任务完毕,关闭会话,Session对象在使用完毕后需要关闭以释放资源
sess.close()
-----------------------------------------
2
# 交互式
sess = tf.InteractiveSession()
print(a.eval())
-----------------------------------------
2
我们来运算一下
v1 = tf.Variable(10)
c1 = tf.constant(10)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
c=sess.run(v1*c1)
print(c)
-----------------------------------------
100
这里有两个需要注意的:
tf.global_variables_initializer()
这里的Variable
在放入Session
之前要初始化,至于为什么?我也不知道,不初始化就报错!这里使用的是全局都初始化,还可以v1.initializer.run()
进行初始化。数据类型
必须是同类型,tf.Variable(10)
里面的10
是整数类型,常量里的10
也是整数类型。运算时没有问题的。但是如果是10.0
,ta是浮点型,运算的时候就会报错了。也就是要么都是整数,要么都是小数。
占位符placeholder
placeholder他先站住位置,之后再往里放数也就是所谓的feed(喂)给它数据。通过字典的形式传入。
m1= tf.placeholder(tf.int32)
m2= tf.placeholder(tf.int32)
addm=tf.add(m1,m2)
with tf.Session() as sess:
b=sess.run(addm,feed_dict={m1:[1,2,3],m2:[4,5,6]})
print(b)
-----------------------------------------
[5 7 9]
此时我们再引入两个概念
图与节点(graphs and op)
y=kx+b
刚才是做最简单的乘法预算。现在这个图是
y=kx+b
每一次运算都是一个图谱,都是Tensor(数据
又译:张量
)flow(流向)各个op(节点)。这就是为什么叫TensorFlow
图里的
MatMul
还有Add
都是一个节点。
节点和图在代码里的模样:
m1= tf.placeholder(tf.int32)
m2= tf.placeholder(tf.int32)
addm=tf.add(m1,m2)
with tf.Session() as sess:
#运行第一个graphs,放一个tf.add节点
b=sess.run(addm,feed_dict={m1:[1,2,3],m2:[4,5,6]})
#运行第二个graphs,放一个tf.add节点
c=sess.run(addm,feed_dict={m1:[1,2,3],m2:[4,5,6]})
print(b)
print(c)
下一期待定,我再学一学。。。