1.Tensorflow的基本概念:
- 1.使用图(graphs)来表示计算任务
2.在被称之为会话(Session)的上下文(context)中执行图
3.使用tensor表示数据
4.通过变量(Variable)维护状态
5.使用feed和fetch可以为任意的操作赋值或者从其中获取数据
Tensorflow是一个编程系统,使用图(graphs)来表示任务,图(graphs)中的节点称之为op(operation),一个获得0个或多个Tensor,执行计算,产生0个或多个Tensor.Tensor看做是一个n维的数组或列表。图必须在会话(Session)里被启动。
图的基本框架
常量的使用
import tensorflow as tf a1 = tf.constant([[2, 3]]) # 定义一个常量
a2 = tf.constant([[3], [3]])
result = tf.matmul(a1, a2) # 将两个常量相乘
print(result) # result是一个tonsor,所有的graphs都必须在会话(session)中执行
# Tensor("MatMul:0", shape=(1, 1), dtype=int32)
sess = tf.Session() # 创建会话
result = sess.run(result)
print(result) # 返回计算的结果
sess.close() # 关闭会话
# [[15]]
"""
可以用python的with来自行关闭会话:
with tf.Session() as sess:
result = sess.run(result)
print(result)
"""
变量的使用
import tensorflow as tf # 定义一个变量
a1 = tf.Variable(0)
# 定义一个常量
a2 = tf.constant(2)
# 创建相减的op
sub = tf.subtract(a1, a2)
# 创建相加的op
add = tf.add(a1, a2)
"""
with tf.Session() as sess:
sess.run(sub)
这时候直接运行会报错,因为Variable(变量)没有初始化
"""
init = tf.global_variables_initializer() # 全局变量初始化 with tf.Session() as sess:
sess.run(init)
result = sess.run(sub)
print(result) # 0 - 2 = -2
result = sess.run(add)
print(result) # 0 + 2 = 2
Variable和Tensor之间的区别:
- Variable是可更改的,而Tensor是不可更改的。
- Variable用于存储网络中的权重矩阵等变量,而Tensor更多的是中间结果等。
- Variable是会显示分配内存空间的,需要初始化操作(assign一个tensor),由Session管理,可以进行存储、读取、更改等操作。相反地,诸如Const, Zeros等操作创造的Tensor,是记录在Graph中,所以没有单独的内存空间;而其他未知的由其他Tensor操作得来的Tensor则是只会在程序运行中间出现。
- Tensor可以使用的地方,几乎都可以使用Variable。
tensorflow的赋值操作
import tensorflow as tf # 定义一个变量
a1 = tf.Variable(0)
# 定义一个常量
a2 = tf.constant(2)
# 创建相减的op
sub = tf.subtract(a1, a2)
# 创建相加的op
add = tf.add(a1, a2) init = tf.global_variables_initializer() # 全局变量初始化 update = tf.assign(a1, add) # tensorflow里面的赋值要调用tf.assign方法 with tf.Session() as sess:
sess.run(init)
result = sess.run(sub)
print(result) # 0 - 2 = -2
result = sess.run(add)
print(result) # 0 + 2 = 2
for i in range(5):
result = sess.run(update)
print(result) # 2 4 6 8 10