以后要用到深度学习做图像识别。
然后使用TensorFlow+WIN+ANACONDA自己摸索。
做了MNIST之后发现自己不懂的太多。需要从0开始.....
1、TensorFlow需要了解的:
- 使用图 (graph) 来表示计算任务.
- 在被称之为
会话 (Session)
的上下文 (context) 中执行图. - 使用 tensor 表示数据.
- 通过
变量 (Variable)
维护状态. - 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.
- 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个
Tensor(张量)
, 执行计算, 产生 0 个或多个Tensor
. 每个 Tensor 是一个类型化的多维数组.
小结1:
我们得到了几个概念:会话,图,op,Tensor。它们之间的关系可以表示为:
1、 图包含节点(op),op的执行步骤被描述成图。(节点可以用来表示施加的数学操作。也可以是数据的输入输出。)
op获得0或多个张量(Tensor),op执行的计算产生0~n个张量。可以理解为op作为变量常量方法的结合体。
2、这些过程要在会话中进行。图在会话中激活,会话分发op到设备(CPU,GPU)并提供计算方法。
3、一般来说,过程分为两个阶段,一是用一个图来表示和构建神经网络,二是反复执行图中的训练op。
import tensorflow as tf
#第一步 构建输入
# 创建两个常量,作为输入op.
# 加到默认图中.
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3, 3]])#1x2
matrix2 = tf.constant([[2],[2]])#2x1
# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
# 启动默认图.
sess = tf.Session()
# 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.
# 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
# 返回值 'result' 是一个 numpy 'ndarray'对象.
result = sess.run(product)
print (result) #==12
# 任务完成, 关闭会话.
ss.close()
2、关于初学者常用到的类 方法 :
1.Session类。会话类。图在调用它之后才被激活。如果没有使用交互式的会话。一般来说要使用run()方法来运行op的运算和初始化。如果是交互式的话,可以用xx.eval()代替run()方法。
非交互式会话:
#乘法
def Sub():
x=tf.Variable(0,name="one");#新建一个变量op,初始化为0
a=tf.constant(1);#常量op
new_value=tf.matmul(x,a);#运算op,做乘法运算
update=tf.assign(x,new_value);#这个op包括两个op。将new_value给x。
#初始化所有变量
init_op=tf.global_variables_initializer();
with tf.Session() as sess:
sess.run(init_op);#运行这个op
print("new_value=%g"%sess.run(new_value));#new_value是一个op。需要使用run 方法运行
#运行update这个节点。更新x的值
for i in range(3):
sess.run(update);
print(x.eval());
print("new_value=%g"%sess.run(new_value));
交互式:
def Sub2():
sess=tf.InteractiveSession();
x=tf.Variable(0,name="matmul");
a=tf.constant(2)
x.initializer.run();#初始化x
res=tf.subtract(x,a);
update=tf.assign(x,res);
for i in range(3):
print(update.eval());
print(res.eval())
占位符:
placeholder(dtype,shape,name):类似函数形参.参数分别代表数据类型,维度([1,3]代表1行3列),名称
可以作为run()的参数使用
input1=tf.placeholder(tf.float32,[1,2])#输入1.1X2的矩阵
input2=tf.placeholder(tf.float32,[2,1])#2X1的矩阵
output=tf.matmul(input1,input2);
sess=tf.Session();
print(sess.run([output],feed_dict={input1:[[1,2]],input2:[[2],[1]]}))