跟着我左手右手一个慢动作~~耶呃~~来左边跟我一起画条龙,来右边跟我一起画道彩虹。
TensorFlow
正经点不和大家开玩笑,Tensorflow对于入门机器学习的同学们来说一定如雷贯耳。Tensorflow作为谷歌爸爸的开源机器学习框架,强大咱就不多说了,它在搭建各种机器学习模型方面都很方便,可谓不可不学。
TaensorFlow的安装
本教程目前只介绍Windows平台下的安装教程(主要是只会Window,我太菜了),直接按照下面操作:
pip install tensorflow
或者
pip install tensorflow-gpu
然后到你的Idle中看一看,下面代码是否运行成功
import tensorflow as tf
1、张量的基本运算操作
import tensorflow as tf
sess=tf.InteractiveSession()#交互窗口下的会话,否则直接Session
x=tf.constant([[1,3,5,7],[6,8,9,1],[7,5,6,4],[3,1,4,2]],dtype=tf.float32)
#用constant方法创建张量,可以指定数据类型
floatx=tf.constant([[1,3,5,7],[6,8,9,1],[7,5,6,4],[3,1,4,2]],dtype=tf.float32)
tf.transpose(x).eval()#求张量的转置
#eval方法将张量转化为Numpy的数组
>>>array([[1, 6, 7, 3],
[3, 8, 5, 1],
[5, 9, 6, 4],
[7, 1, 4, 2]])
tf.matmul(x,x).eval()#张量的乘法
>>>array([[ 75, 59, 90, 44],
[120, 128, 160, 88],
[ 91, 95, 132, 86],
[ 43, 39, 56, 42]])
tf.matrix_determinant(floatx).eval()#注意这个时候输入要是浮点型数据,计算张量行列式
>>>559.99994
tf.matrix_inverse(floatx).eval()#张量的逆
>>>array([[-0.12857144, -0.09999999, 0.22857143, 0.04285716],
[ 0.05714285, 0.09999999, 0.09285715, -0.43571427],
[ 0.02142857, 0.09999999, -0.24642858, 0.36785716],
[ 0.12142858, -0.1 , 0.10357143, -0.08214287]],
dtype=float32)#输入也必须是浮点型,否则会报错
tf.matrix_solve(floatx,tf.matmul(floatx,floatx)).eval()#求张量的解,已知一个张量和张量的积,求另一个张量
>>>array([[0.9999999, 3.0000007, 5.0000014, 7.000001 ],
[6. , 8. , 9. , 1.0000005],
[7. , 4.999999 , 5.999999 , 3.9999993],
[3.0000002, 1.0000004, 4.0000005, 2.0000002]], dtype=float32)#解矩阵方程
2、约简:是一种跨纬度的张量操作,计算结果比原张量缩减一个维度
import tensorflow as tf
sess=tf.InteractiveSession()
t=tf.constant([[1,2,3],[3,2,1],[8,7,9]])
tf.reduce_max(t,reduction_indices=1).eval()#求每一行的最大值
>>>array([3, 3, 9])
tf.reduce_min(t,reduction_indices=1).eval()#求最小
>>>array([1, 1, 7])
tf.reduce_mean(t,reduction_indices=1).eval()#求平均
>>>array([2, 2, 8])
3、张量分割:通过索引对重复索引元素进行操作
import tensorflow as tf
sess=tf.InteractiveSession()
option=tf.constant([0,0,1,2,2])
t=tf.constant([[1,3,5,7],[2,4,6,8],[2,5,7,9],[1,5,6,4],[9,7,6,4]])
#[0,0,1,2,2]分别对应从第一到第五行;1,2两行都是0,所以会对它俩进行操作,同理对4,5两行
tf.segment_sum(t,option).eval()
>>>array([[ 3, 7, 11, 15],
[ 2, 5, 7, 9],
[10, 12, 12, 8]])#对1,2两行上下求和;对4,5两行上下求和
tf.segment_max(t,option).eval()
>>>array([[2, 4, 6, 8],
[2, 5, 7, 9],
[9, 7, 6, 4]])#同理,求最大值
tf.segment_min(t,option).eval()
>>>array([[1, 3, 5, 7],
[2, 5, 7, 9],
[1, 5, 6, 4]])#同理求最小
tf.segment_mean(t,option).eval()
>>>array([[1, 3, 5, 7],
[2, 5, 7, 9],
[5, 6, 6, 4]])#同理求平均值
4、序列:返回操作对应元素的索引
t=tf.constant([[1,3,5,7],[2,4,6,8],[2,5,7,9],[1,5,6,4],[9,7,6,4]])
tf.arg_max(t,0).eval()#第一个参数是张量,第二个是轴;返回每一列最大值的索引
>>>array([4, 4, 2, 2], dtype=int64)
tf.arg_min(t,1).eval()#返回每一行最小值的索引
array([0, 0, 0, 0, 3], dtype=int64)
5、张量形状变换
t=tf.constant([[1,3,5,7],[2,4,6,8],[2,5,7,9],[1,5,6,4],[9,7,6,4]])
tf.shape(t).eval()#返回张量形状
>>>array([5, 4])
tf.size(t).eval()#返回张量的大小
>>>20
tf.reshape(t,[5,4]).eval()#改变张量的形状
>>>array([[1, 3, 5, 7],
[2, 4, 6, 8],
[2, 5, 7, 9],
[1, 5, 6, 4],
[9, 7, 6, 4]])
6、张量切片(难点)
t=tf.constant([[1,3,5,7],[2,4,6,8],[2,5,7,9],[1,5,6,4],[9,7,6,4]])
tf.slice(t,[2,2],[2,2]).eval()
array([[7, 9],
[6, 4]])
原理:第一个数组表示初始位置,第二个表示截取的张量形状;上面第一个[2,2]表示第三行第三列(数组索引从0开始),7即为起始元素;第二个数组[2,2]表示从起始元素开始算几行几列,[2,2]就表示两行两列,也就是[[7,9],[6,4]]
练习题
对数组[[1,3,5,7],[2,4,6,8],[2,5,7,9],[1,5,6,4],[9,7,6,4]],tf.slice([1,2],[4,2])切片结果是多少?
答案:[[6,8],[7,9],[6,4],[6,4]],你做对了吗?
以上就是TensorFlow最最基本的操作。有人可能就要问了,TensorBoard呢?Holder呢?哎,别急别急,等到用时,结合实例学习岂不更好?
我要变强,我要变强,一起变强吧