pytorch代码跟着写
B站上发现了一个图像代码教学的up主,主要用pytorch和tensorflow写,下面附上链接:
B站:https://space.bilibili.com/18161609
Github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_learning
后面我会记录在LeNet,AlexNet,VGGnet,GoogleNet,Resnet学习中,之前不清楚不明白的函数等知识。
LeNet:
#torch中要求数据为[batchsize,channel,height,weight],x = torch.rand([32,3,32,32])
但在网络结构设置时是不用考虑batch的,只需要知道bath占第0维
#outchannel有多少个代表kenerl有多少个,self.conv1 = nn.Conv2d(3,16,5)
#view和flatten都用于展平为一维,x = x.view(-1, 32*5*5) , x = torch.flatten(x, start_dim=1)
view中-1代表自动推理第一个维度(batch),32通道5*5长宽代表展平后的节点个数。flatten种start_dim代表按channel第1维展开。
# compose把多个方法进行打包,成一个方法。transforms.Compose([],[])
#transforms.ToTensor()功能 <1> 维度顺序H*W*C 转换为 C*H*W,<2>数据大小[0,255]转换为[0,1]
#num_worker代表线程个数,windows下是0。方法代表把数据按照batch_size加载。
trainloader = torch.utils.data.DataLoader(trainset,batch_size=36, shuffle=False,num_workers=0)
#nn.CrossEntropyloss() 这个损失函数中有softmax,所以定义网络时不用设softmax层
#loss.item()把单个tensor值转换为numpy。
#在pytorch中每次batch训练时都要把历史梯度清零,optimizer.zero_grad()
#进行预测时不用计算梯度,with torch.no_grad()
#保存模型 save_path = './Lenet.pth' torch.save(net.state_dict(), save_path)
AlexNet:
# 用Sequential构造网络,可以将多个层看成一个块 nn.Sequential
#nn.ReLU(inplace=True)中参数inplace,通过这个方法可以增加计算,同时降低内存使用(?)
#nit_weights是否进行随机初始化权重, def __init__(self,num_classes=1000,init_weights=False)。调用nit_weights函数。
更新ing