pytorch学习第五集
-
1 术语
- scalar 标量
- vector 向量
- matrix 矩阵
- 张量就是n维数组
- 秩,轴,形状
-
2 tensor 的 构造方式
import torch
import numpy as np
data = np.array([1,2,3])
print(torch.Tensor(data))
# 副本
print(torch.tensor(data))
# 副本
print(torch.as_tensor(data))
# 视图
print(torch.from_numpy(data))
# 视图
-
3
- torch.eye(2)
- torch.zeros(3,4,dtype=int)
- torch.ones(3,4)
- torch.rand(3,4)
-
4 torch 的 全局缺省值
- torch.get_default_dtype()
- t1 = torch.tensor(np.array([1,2,3]),dtype=torch.float64)
-
5 torch.tensor 的四种构造方式各有利弊
- 副本占用内存
- 视图和元数据共享相同内存(即他们的指针指向同一块内存区域)
-
6 torch.tensor 的分量
- torch.tensor(t.shape).prod()
- t.numel()
-
7 张量的压缩和解压缩
data = np.array(
[[1,1,1,1],
[2,2,2,2],
[3,3,3,3]])
t = torch.tensor(data)
print(t.reshape(1,12).squeeze(dim=0))
print(t.reshape(1,12).squeeze(dim=0).shape)
print(t.unsqueeze(dim=2))
print(t.unsqueeze(dim=2).shape)
- 8 torch.tensor 的一维化
print(t.reshape(-1))
print(t.flatten())
- 9 torch.tensor 的连接
print(torch.cat((t1,t2),dim=0))
- 10 torch.tensor 的按指定维flatten
t1 = torch.ones((4,4),dtype = int)
t2 = torch.ones((4,4),dtype = int)*2
t3 = torch.ones((4,4),dtype = int)*3
t = torch.stack((t1,t2,t3))
t = t.reshape(3,1,4,4)
print(t)
t = t.flatten(start_dim=1)
print(t)
- 11 numpy——broadcast——广播
np.broadcast_to(2,[2,2])
- 12 torch.tensor 中一些函数所蕴含的广播运算
t = torch.tensor(
[[0,5,7],
[6,0,7],
[0,8,0]],dtype=torch.float32)
print(t.eq(0)) # 0 是否相等
print(t.ge(5)) # 5 大于等于5
print(t.gt(5)) # 5 大于5
print(t.lt(7)) # 7 小于7
print(t.le(7)) # 7 小于等于7
print(t.neg()) # 取相反数
print()
- 13 torch.tensor 张量缩减
t = torch.tensor(np.ndarray)
t.max()
t.sum()
t.argmax() # 取最大值处的索引
t.max(dim=0)
t.argmax(dim=0)
t.mean(dim=1).tolist() # list
t.mean(dim=1).numpy() # convert to a ndarray
- 14 ETL
- E extract 提取
- T transform 转换
- L load 加载
tensor([[0.8410, 0.8758, 0.6165, 0.2126],
[0.0720, 0.9284, 0.4022, 0.1788],
[0.1653, 0.8602, 0.7925, 0.3128]])
- 15 torchvision : 是一个队流行的数据集、模型和计算机视觉的图像转换的访问的包
- torchvision.transforms :一个接口,能够访问图像处理的通用转换
- 16 dataset 数据集
- 17 dataloader 数据加载器封装数据集并提供对底层数据的访问
class OHLC(Dataset):
def init(self,csv_file):
self.data = pd.read_csv(csv_file)
def __getitem__(self,index):
r = self.data.iloc[index]
label = torch.tensor(r.is_up_day,dtype = torch.long)
sample = self.normalize(torch.tensor([r.open,r.high,r.low,r.close]))
return sample,label
del __len__(self):
return len(train_set)
- 18 获取数据集,转化,放在数据加载器中
import torch
import torchvision
import torchvision.transforms as transforms
train_set = torchvision.datasets.FashionMNIST(
root = ‘./data/FashionMNIST’,
train=True,
download=True,
transform = transforms.Conpose(
[
transforms.ToTensor()
]))
File "<ipython-input-2-20eddbc844af>", line 1
- 18 获取数据集,转化,放在数据加载器中
^
SyntaxError: invalid character in identifier
- 19 使用dataset 和 dataloader(transform = transforms.Compose([transforms.ToTensor()])) //这是什么意思?)
import torch
import torchvision
import torchvision.transforms as transforms
import numpy as np
import matplotlib.pyplot as plt
train_set = torchvision.datasets.FashionMNIST( # 下载数据集
root = './data/FashionMNIST', # 数据集存放的位置
train=True, # True表示下载的是训练集
download=True, # 如果上述位置中不存在数据集的话就下载
transform = transforms.Compose( # 将数据集转化为我们需要的张量的类型
[
transforms.ToTensor()
]))
train_loader = torch.utils.data.DataLoader(train_set,batch_size=10) # 在这里定义了一个数据加载器对象,参数是数据集和一批的数量
torch.set_printoptions(linewidth=120)
print(train_set.train_labels[:100]) # 打印训练集标签的前100个
train_set.train_labels.bincount() # 这里可以看出训练集中标签的各个分类的个数 、、 目前来说一般都是均衡分配的
batch = next(iter(train_loader)) # 这里使用了迭代器,返回train_loader 的 第一个元素,也就是第一批
images,labels = batch # 每一批都是tuple类型,images和labels都是tensor类型,images的shape是【10,1,28,28】
grid = torchvision.utils.make_grid(images,nrow=10) # make_grid的作用是将多幅图片拼成一幅图片
plt.figure(figsize=(15,15))
plt.imshow(np.transpose(grid,(1,2,0))) // 有关np.transpose()函数的作用请参考 https://blog.csdn.net/jnbfknasf113/article/details/110240761
print('labels:',labels)