本文是列举并比较了目前最火的两大深度学习框架(Tensorflow和Pytorch)的基础语法
小插曲:
查看我们电脑上的tensorflow版本(我一般都是在jupyter操作)
import tensorflow as tf
tf.__version__
查询tensorflow安装路径为:
tf.__path__
tensor可以看作是一个独立的语言
a=tf.constant(1)
或者
b=tf.constant([[1,2,3],[4,5,6]])
如果想取出常量的值,可以用
`a.numpy()
tensorflow可以像numpy一样进行切片和索引
b[1.1]
#注:如果想取出其中的值可以用
b[1,1].numpy()
b[:,1:]
#tensorflow特有的写法
a[...,1:]#...表示逗号之前所有的维度
如果a是三维,也可以表示为a[:,:,1:],不过有点麻烦!!
#直接修改内部的值会报错
比如:a[0,1]=20
#tensor和ndarray的转化
1.tensor->ndarray
a.numpy
2.ndarray->tensor
tf.constant(a)
与常量不同,变量内部的值是可以改变的
c=tf.Variable([[1,2,3],[3,4,5]])
#转化为numpy
c.numpy
#返回的是变量值创建的tensor
c.value()
#变量的赋值(必须通过assign的方法)
c.assign(c*2)相当于c=c*2
#也可以这样操作
c[0,1].assign(5)/c[1].assign([7,8,9])
两者方式:1.python自带的运算符;2.tensorflow封装的数学运算函数
a+b等同于tf.add(a,b)
a-b等同于tf.subtract(a,b)
a*b等同于tf.multiply(a,b)
a/b等同于tf.divide(a,b)
矩阵操作
如果按列进行求和
a.sum(axis=0)等同于tf.reduce_sum(a.axis=0)
tf.reduce_sum(a)将张量中的所有元素相加
如果将tensor转化为numpy
tf.reduce_sum(a.axis=1).numpy
矩阵的乘法(点乘)
tf.matmul(x,y)
#注:@符号可以表示矩阵的点乘
Pytorch最基本的操作对象是张量(与tensorflow相同),它表示一个多维矩阵.
torch.tensor([6, 2],dtype=torch.int32)
torch.tensor(np.array([1, 2, 3]))
#torch.tensor()括号里面可以是列表、元组和ndarray
注意这边的dtype写法还是跟tensorflow有点区别的
与ndarray类似, pytorch也有很多快捷的方法用来创建张量.
import torch
# 创建一个[0, 1)之间的随机均匀分布
x = torch.rand(2, 3)
# 创建一个标准正态分布
x = torch.randn(2, 3)
# 创建全是0的tensor
x = torch.zeros(2, 3)
# 创建全是1的tensor
x = torch.ones(2, 3)
如何去得到张量的大小
x = torch.ones(2, 3, 4)
x.shape
# 输出 torch.size([2, 3, 4])
x.size()
# 输出 torch.size([2, 3, 4])
x.size(0)
# 输出 2
pytorch中的tensor有以下基本数据类型
数据类型 | pytorch语法表示 |
---|---|
32位浮点型 | torch.float32 |
64位整型 | torch.int64 |
64位浮点型 | torch.float64 |
32位整型 | torch.int32 |
16位整型 | torch.int16 |
举个例子
x = torch.tensor([6, 2], dtype=torch.float32)
# 通过.type转换数据类型
x.type(torch.int64)
注:tensorflow不能直接使用tensor方法去创建tensor
torch与ndarray的转化
a = np.random.randn(2, 3)
x1=torch.from_numpy(a)
x1.numpy()
先申明两个张量对象
x = torch.ones(2, 3)
x1=torch.from_numpy(np.random.randn(2, 3))
和单个数字运算, tensor中每个元素分别和这个数字运算
x + 3
output:
tensor([[4., 4., 4.],
[4., 4., 4.]], dtype=torch.float64)
两个形状相同的tensor进行运算, 对应位置元素分别运算.
方法1:直接相加
x + x1
方法2:调用pytorch的运算方法
x.add(x1)
值得一提的是,加了下划线表示对x本来的值进行修改
x.add_(x1)
改变tensor的形状, 使用.view, 相当于numpy中的reshape
x.view(3, 2)
x.view(-1, 1)#类比reshape(-1,1)
聚合操作
x.mean()
x.sum()
指定维度进行求和,如果不设置,默认对所有元素进行求和
x.sum(dim=1)
如果我们想取出单个元素的张量中的值,可以使用.item()
x.sum().item()
pytorch中的切片和索引操作与ndarray是一致的
矩阵操作
方法1:torch.matmul(matrix1,matrix2)
方法2:matrix1@matrix2
matrix3.dot(matrix4)
注:matrix3和matrix4的大小必须相同
。