开始在B站上学习TensorFlow, 这个系列大概长这样。
这个repo提供了代码,ppt,以及视屏的链接:
https://github.com/glossary95/TensorFlow-Tutorial
这篇笔记是1-3的内容,这部分讲了一点基本的小语法,作为正式开始机器学习之前的准备。下面逐段讲解该部分的代码示例:
1.先引入几个基本概念:
import tensorflow as tf
print('Load TV version',tf._version_)
#Tensor 在数学中是“张量”
#标量,矢量\向量,张量
#简单地理解
#标量表示值
#矢量表示位置(空间中的一个点)
#张量表示整个空间
#一维数组是矢量
#多维数组是张量,矩阵也是张量
#4个重要的类型
#@Variable 计算图谱中的变量
#@Tensor 一个多维矩阵,带有很多方法
#@Graph 一个计算图谱
#@Session 用来运行一个计算图谱
计算图谱呢,官网提供的长这样,先有一个粗略认识:
2. 三个重要的函数: tf.func_name
#三个重要的函数
#Variable 变量
#以下是变量这个类的constructor
#tf.Variable.__init__(
# initial_value=None,@Tensor
# traibale=True,
# collections=None,
# validate_shape=True,
# caching_device=None,
# name=None,
# variable_def=None
# dtype=None
#)
#注意: Variable 是一个Class,Tensor也是一个Class
#Constant 常数
# tf.constant(value,dtype=None,shape=None,name='Const')
# return : a constant @Tensor
#Placeholder 暂时变量?
#tf.placeholder(dtype,shape=None,name=None)
#return :一个还尚未存在的 @Tensor
注意: tf.constant和tf.placeholder返回的都是一个张量tensor
下面实现一个四则运算的函数 basic_operation():
变量 + 变量 = 张量(addv)
常量就是一个张量,常量 + 常量 = 张量
运行session,初始化所有的 变量
张量.eval(session = my_session_name)与my_session_name.run(张量)等价。
在with tf.Session(graph=graph) as mySess:这个代码块里,该写session=sess的地方,都可以省略,比如run(),比如eval()。因为这个块里面,使用的就是mySess。
def basic_operation():
v1 = tf.Variable(10)
v2 = tf.Variable(5)
addv = v1 + v2
print(addv)
print(type(addv)) //Tensor
print(type(v1)) //Variable
c1 = tf.constant(10)
c2 = tf.constant(5)
addc = c1 + c2
print(addc)
print(type(addc)) //Tensor
print(type(c1)) //Tensor
#用来运行计算图谱的对象\实例?
#session is a runtime
sess = tf.Session();
#Variable ->初始化 ->有值的Tensor
tf.initialize_all_varibales().run(session=sess)
print('变量是需要初始化的')
#以下两行的作用是一样的:在session下算出addv的值
print('加法(v1,v2)=',addv.eval(session=sess))
print('加法(v1,v2)=',sess.run(addv))
print('加法(c1,c2)=',addc.eval(session=sess))
#上面的一切,可以改写成这样:
#有一个图,里面有一些数据,然后有一个针对这个图的session
#tf.Graph.__init__()
#Creates a new empty Graph
graph = tf.Graph()
with graph.as_default():
value1 = tf.constant([1,2])
value2 = tf.Variable([3,4])
mul = value1 * value2
mul2 = value1 / value2
with tf.Session(graph=graph) as mySess:
tf.initialize_all_variables().run()
print('一一对应乘法(value1,value2)=',mySess.run(mul))
print('一一对应乘法(value1,value2)=',mul.eval())
print('一一对应的除法(value1, value2) = ', mySess.run(mul2))
print('一一对应的除法(value1, value2) = ', mul2.eval())
# tensor.eval(session=sess)
# sess.run(tensor)
3. Placeholder很重要
# 省内存?placeholder才是王道
# def use_placeholder():
graph = tf.Graph()
with graph.as_default():
value1 = tf.placeholder(dtype=tf.float64)
value2 = tf.Variable([3, 4], dtype=tf.float64)
mul = value1 * value2
with tf.Session(graph=graph) as mySess:
tf.initialize_all_variables().run()
# 我们想象一下这个数据是从远程加载进来的
# 文件,网络
# 假装是 10 GB
value = load_from_remote()
for partialValue in load_partial(value, 2):
# runResult = mySess.run(mul, feed_dict={value1: partialValue})
evalResult = mul.eval(feed_dict={value1: partialValue})
print('乘法(value1, value2) = ', runResult)
# cross validation
def load_from_remote():
return [-x for x in range(1000)]
# 自定义的 Iterator
# yield, generator function
def load_partial(value, step):
index = 0