今天学习TensorFlow,一个超级好用的神经网络搭载库
什么是TensorFlow
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。
其命名来源于本身的原理,Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。Tensorflow运行过程就是张量从图的一端流动到另一端的计算过程。常用于计算图中
关于计算图,可以观看我之前的博客:AI学习——自动微分算法
TensorFlow的特性
- 高度的灵活性:只要能够将计算表示成为一个数据流图,那么就可以使用TensorFlow。
- 可移植性:TensorFlow支持CPU和GPU的运算,并且可以运行在台式机、服务器、手机移动端设备等等。
- 自动求微分:TensorFlow内部实现了自动对于各种给定目标函数求导的方式。
- 多种语言支持:Python、C++
- 性能高度优化
基础代码
TensorFlow API——数据类型
# 标量
import tensorflow as tf
a = tf.constant(1,2)
type(a)
a
# 向量
b = tf.constant([1,2.,3.3])
b.numpy(), b.shape
b
# 矩阵
c = tf.constant([[1,2],[3,4]])
c.shape
c
待优化张量
# 列表转张量
a = tf.Variable([[1,2],[3,4]])
a
# 全0向量矩阵
tf.zeros([2,2,2]), tf.zeros_like(a)
# 全1向量矩阵
tf.ones([2,2,2]), tf.ones_like(a)
# 全50向量矩阵
tf.fill([3,4],50)
参数张量
# 正态随机分布
tf.random.normal([2,2])
tf.random.normal([2,2], mean=1,stddev=2)
tf.random.truncated_normal([784, 256], stddev=0.1)
# 均匀分布
#tf.random.uniform([2,2])
tf.random.uniform([2,2],maxval=10)
#tf.random.uniform([2,2],maxval=100,dtype=tf.int32)
# 序列
#tf.range(10)
#tf.range(10,delta=2)
tf.range(1,10,delta=2)
参数张量
# 切片
x = tf.random.normal([2,3,3,2])
x[0]
x[0,:,:,1].shape
x
# 改变维度
x=tf.range(12)
x=tf.reshape(x,[3,4])
x
# 交换维度
x = tf.random.normal([2,32,32,3])
tf.transpose(x,perm=[0,3,1,2])
# 广播机制
x = tf.random.normal([2,4])
w = tf.random.normal([4,3])
b = tf.random.normal([3])
y = x@w+b
print("x:" ,x)
print("w:" ,w)
print("b:" ,b)
print("y:" ,y)
基本运算
# 矩阵乘法
a = tf.random.normal([23,32])
b = tf.random.normal([32,2])
a@b, tf.matmul(a, b)
a = tf.random.normal([4,3,23,32])
b = tf.random.normal([4,3,32,2])
a@b
# 乘方
x = tf.range(4)
tf.pow(x,2),tf.square(x)
x**2
tf.sqrt(tf.cast(x,dtype=tf.float32))
拼接
# 合并拼接
a = tf.random.normal([4,35,8]) # 4个班级
b = tf.random.normal([6,35,8]) # 6个班级
tf.concat([a,b],axis=0) # 合并成绩册
a = tf.random.normal([10,35,3]) # 3门课程
b = tf.random.normal([10,35,5]) # 5门课程
tf.concat([a,b],axis=2) # 在科目维度拼接
# 分割样本
x=tf.random.normal([6000,28,28,1])
x_train,x_test=tf.split(x, num_or_size_splits=[4000,2000], axis=0)
x
数据统计
# 向量范数
x = tf.ones([2,2])
#tf.norm(x)
tf.norm(x,ord=4)
#tf.norm(x,ord=3)
# 概率输出
out = tf.random.normal([2,10])
out = tf.nn.softmax(out, axis=1)
pred = tf.argmax(out, axis=1)
y = tf.random.uniform([2],dtype=tf.int64,maxval=10)
out = tf.equal(pred,y)
out = tf.cast(out, dtype=tf.float32)
correct = tf.reduce_sum(out)
学会了这些基础语法,接下来将进入深度学习,首先进行梯度下降的实战。