Pytorch基础知识1

深度学习day1

1.Pytorch介绍与张量的创建

张量和数组的区别,Tensor可以在GPU上运行,张量和数组可使用同一片内存空间

Tensor支持自动微分(Pytorch中)

Pytorch中导入是

import torch
a=[1,2,3]
b=torch.tensor(a)
type(b)     ##显示的是b的类型
b.dtype     ##显示的是b中数据的类型

也可以用numpy数组创建tensor

a=np.random.normal((2,3))
b=torch.tensor(a)
c=torch.ones_like(b)   ##创建成相同形状和数据类型的张量
c=torch.zeros_like(b)
c=torch.rand_like(b)
​

也可以用另一个张两种

a=torch.rand([2,2,])
a.dtype
a.shape
a.device张量是在cpu还是GPU上面创建的
​
if torch.cuda.is_available():
    tensor.
返回是否是tensor
torch.is_tensor(obj)
这个张量中所有元素的总数目
​
a=torch.numel(b)
​
5*5的矩阵
torch.zeros([5,5])
arrnge
range(start=0,end,step=1)

torch.cat两个张量的连接

torch.cat(tensors,dim=1) dim为在那个维度链接

torch.cat([a,b],dim=1)

2.张量的创建API

torch.chunk张量的分割

b=torch.rand([3,2])
torch.chunk(b,chunks=2,dim)

3.DataSet和DataLoaders

1.如何构建自己的训练数据集

1.1加载内置数据集

DataSet单个样本

DataLoader多个样本

利用torch内置的数据库导入一些数据集

import torch
import torch.utils.data inport Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt
​
​
training_data = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor()
)
test_data=datasets.FanshionMNIST(
    root='data',
    train=False,
    download=True,
    transform=ToTensor()
)
​
​
label_map={
    0:"T-Shirt",
    1:"Coat",
    2:"Pullover"
    .........
}
figure=plt.figure(gigsize=(8,8))
cols,rows=3,3
for i in range(1,cols*rows+1):
    sample_idx=torch.randint(len(training_data),size=(1,)).item()
    img,label=training_data[sample_idx]
1.2在Torch中创建自己的数据集

自定义Dataset要实现三个函数(方法),init,len,getitem__

import os
import pandas as pd
from torchvision.io import read_image
​
class CustomImageDataset(Dataset):
    def __init__(self,annotation_file,img_dir,transform=None,target_transform=None):
        self.img_labels=pd.read_csv(annotations_file)   ##数据的标签
        self.img_dir = img_dir       ##数据的路径
        self.transform = transform  ##数据转换格式
        self.target_transform=target_transform
        
    def __len__(self):
        return len(self.img_labels)   ##每个laabel对应一个图像
    
    def __getitem__(self,idx):      ##完成数据路径格式的转变,保证能访问到数据
        img_path=os.path.join(self.img_dir,self.img_labels.iloc[idx,0])
        image = read_image(img_path)
        label = self.img_labels.iloc[idx,1]
        if self.transform:
            image=self.transform(image)
        if self.target_transform(label):
            label=self.target_transform(label)
         return image,label

1.3 DataLoader

dataset每一训练一个样本,提高抗噪能力构造多个样本的minibaths

对数据打乱shufflue防止过拟合

multprocessing多进程加载数据,每次处理多个

from torch.utils.data import DataLoader
​
train_dataloader = DataLoader(training_data,batch_size=64, shuffle=True)
test_DataLoader = DataLoader(test_data,batch_szie=64,shuffle=True)   ##一般测试集不需要打乱
​

shuffle=True的话,每一轮的batch不一样了

train_features, train_labels=next(iter(train_dataloader))
print(f"Feature batch shape:{train_features.size()}")
print(f"Labels batch shape:{train_labels.size()}")
img=train_features[0].squeeze()
label = train_labels[0]
plt.imshow(img,cmap="gray")
plt.show()
print(f"label:{label}")

map-style datasets

collate_fn

vae

1.3.1 DataLoader源码

从磁盘中读取照片,并从磁盘中读取,把单个样本组成一批次,再输入到神经网络中训练

init

batch_sampler

num_workers 多线程的

collate_fn 对一个batch进行后处理,进行填充

batch_sampler 以什么样的方式,以什么

drop_last 是否丢掉最后一行数据

iter   

BatchSampler 每次把一批数据传入列表,直到等于Batch_size

4.Pytorch搭建神经网络

Transforms 对数据集进行处理,使其满足神经网络的输入要求

traget_transform也是 标签值变换啥的

flatten=nn.Flatten()

保留第一维和最后一维

Linear线性层

layer1 = nn.Linear(in_features=28*28, out_features = 20)
hidden1 = layer1(flat_image)
print(hidden1.size())

nn.Relu

非线性函数,通常是在线性变换后加入的

是一个类,要实例化
class torch.nn.Relu(Inplace=True)

nn.Sequential

容器,将Module作为S实例化的参数

seq_module = nn.Sequential(
    flatten,
    layer1,
    nn.Relu(),
    nn.Linear(20,10)  ##经过线性层后输出的是logits
)
input_image = torch.rand(3,28,28)
logits = seq_modules(input_image)

nn.Softmax

softmax = nn.Softmax(dim=1)   ##对某一维度的归一化
pred_probab = softmax(logits)

指数的归一化,Softmax也是一个类,需要实例化

parameters返回的是一个元组,para有很多具体化的东西

buffers每个变量的均值,方差啥的

print("Model strure:", model, "\n\n")
​
for name, param in model, named_parameters():
    print(f"Layer:{name} | Size:{param.size()} | Values:{param[:2]}\n")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值