小土堆完整的训练模型套路一,学习笔记

下面是模型的构建代码,这个文件开始我保存的文件名是27module,后面导入的时候这么写不行就改成了module,其次就是在自己写神经网络的时候一定要仔细算一下你的像元数前后层,是否对应正确,不然可能出现报错,矩阵不一样没法相乘,报错会在运行界面显示:RuntimeError: mat1 and mat2 shapes cannot be multiplied

import torch
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear, Module

"""
写网络的时候一定要检查自己写的网路是不是有问题
"""
class MyMoudule(Module):
    def __init__(self):
        super(MyMoudule, self).__init__()
        self.sequential=Sequential(
            Conv2d(3,32,(5,5),padding=2),
            MaxPool2d(2),
            Conv2d(32,32,(5,5),padding=2),
            MaxPool2d(2),
            Conv2d(32,64,(5,5),padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(64*4*4,64),
            Linear(64,10)

        )

    def forward(self,x):
        x=self.sequential(x)
        return x

if __name__=="__main__":
    input=torch.ones([64,3,32,32])#batch_size,channel,长,宽
    mymoudule=MyMoudule()
    output=mymoudule(input)
    print(output.size())

这个模型运行结果

torch.Size([64, 10])

进程已结束,退出代码为 0

主程序代码

import torchvision
from torch.utils.data import DataLoader
from module import *#貌似不能网络的文件不能带数字在前面
t=torchvision.transforms.ToTensor()
train_data=torchvision.datasets.CIFAR10(root="dataset_load",train=True,transform=t,download=True)
test_data=torchvision.datasets.CIFAR10(root="dataset_load",train=False,transform=t,download=True)
#看训练集和测试集的长度
train_data_size=len(train_data)
test_data_size=len(test_data)
print("训练集的长度是:",train_data_size)
print("测试集的长度是:",test_data_size)
#加载数据集
train_dataload=DataLoader(dataset=train_data,batch_size=64,shuffle=True,drop_last=True,num_workers=0)
test_dataload=DataLoader(dataset=test_data,batch_size=64,shuffle=True,drop_last=True,num_workers=0)

#创建网络模型
mymoudule=MyMoudule()

#创建损失函数
loss_fn=torch.nn.CrossEntropyLoss()

#创建优化器
learning_rate=0.001
optim=torch.optim.SGD(mymoudule.parameters(),lr=learning_rate)#填入模型参数和学习速率

#记录训练的次数
total_train_step=0
#记录测试的次数
total_test_step=0
#训练的轮数
epoach=10

for i in range(epoach):
    print(f"————————————第{i+1}轮训练————————————-")
    for j in train_dataload:
        img,target=j
        comeout=mymoudule(img)
        #优化器进行调优
        loss=loss_fn(comeout,target)#获得损失值
        optim.zero_grad()#梯度清零
        loss.backward()#反向传播,获得梯度
        optim.step()#利用梯度优化神经网络的参数
        total_train_step=total_train_step+1
        print(f"训练次数{total_train_step},损失值{loss.item()}")#这个loss.item()可以将loss从tensor变成int,后续可视化可能用到

运行结果,稍微跑了一下

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值