pytorch神经网络

import torch.nn as nn
import torch
import torch.nn.functional as F

#定义网络模块  主要包括初始化、前向传播、数据维度处理
class Net(nn.Module):
    #初始化
    def __init__(self,channel,kernel_count,kenel_size):
        super(Net,self).__init__()
        #卷积层
        self.conv1=nn.Conv2d(1,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        #全连接层
        self.f1=nn.Linear(5*16*5,128)
        self.f2=nn.Linear(128,64)
        self.f3=nn.Linear(64,10)
    #前向传播层
    def forward(self,x):
        x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))#卷积 激活  池化
        x=F.max_pool2d(F.relu(self.conv2(x)),(2,2))
    
        x=x.view(1,-1)#数据维度转换
        x=F.relu(self.f1(x))
        x=F.relu(self.f2(x))
        x=self.f3(x)
        return x
    #转换数据维度
    def num_reshapes(self,x):
        size=x.size()[1:]
        num_sizes=1
        for i in size:
            num_sizes*=i
        return num_sizes

#实例化网络模型
net=Net(1,6,5)


#输入数据
inputs=torch.randn(1,1,32,32)
#输出
out=net(inputs)
#目标值(确保输出和目标数据的维度一致  如果不一致,要进行维度的转化)
target=torch.randn(1,10)

#定义损失函数
loss_function=nn.MSELoss()
#定义优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.1)
#列表存储loss值
loss_list=[]
#训练
for i in range(20):
    out=net(inputs)#输出
    loss=loss_function(out,target)#计算loss
    loss_list.append(loss)#存储loss用于后续画loss曲线
    print(loss)
    optimizer.zero_grad()#梯度清零 防止梯度叠加
    loss.backward()#反向传播
    optimizer.step()#更新到每一个参数

#画loss曲线
import matplotlib.pyplot as plt
epochs=[i for i in range(21)]
plt.plot(range(9),loss_list[:9],"red")
plt.xlabel("epoch")
plt.ylabel("loss")
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>