Pytorch学习每日记录

  今天学习的是一个由两个卷积层和三个全连接层组成的神经网络。接触到了机器学习领域,要学的东西多了起来。

#导入包
import torch
import torch.nn as nn
import torch.nn.functional as F

#定义神经网络
class Net(nn.Module):

    def __init__(self):#定义神经网络结构,输入数据结构为 1x32x32
        super(Net, self).__init__()#两个卷积层,三个全连接层
        
        #第一层(卷积层)
        self.conv1 = nn.Conv2d(1,6,3) #nn.Conv2d用来定义二维卷积层
                                    #1,6,3 分别代表了 输入频道、输出频道、卷积大小
        
        #第二层(卷积层)
        self.conv2 = nn.Conv2d(6,16,3)#输入频道 6,输出频道 16,卷积 3x3
        
        #第三层(全连接层)
        self.fc1 = nn.Linear(16*28*28,512)#16:Conv2d的输出,28:32-2-2(每次卷积减2)
                                        #输入维度 16x28x28=12544,输出维度 512
            
        #第四层(全连接层)
        self.fc2 = nn.Linear(512, 64)#输入维度 512,输出维度 64
        
        #第五层(全连接层)
        self.fc3 = nn.Linear(64, 2)#输入维度 64,输出维度 2
        
   
    def forward(self, x): #定义数据流向
        #x=self.conv1(x)
        x = self.conv1(x)
        x = F.relu(x)
        
        x = self.conv2(x)
        x = F.relu(x)
        
        
        x = x.view(-1,16*28*28)
        x = self.fc1(x)
        x = F.relu(x)
        
        x = self.fc2(x)
        x = F.relu(x)
        
        x = self.fc3(x)
        
        return x

#随机生成输入
input_data = torch.randn(1,1,32,32)
print(input_data)
print(input_data.size())

#运行神经网络
out=net(input_data)
print(out)
print(out.size())

#随机生成目标值
target=torch.randn(2)
target=target.view(1,-1)#??为什么是(1,-1)
a=torch.randn(2).view(1,-1)
print(target)
print(a)

criterion=nn.L1Loss()#定义损失函数
loss=criterion(out,target)
print(loss)

#反向传递,需要先把所有的梯度清零
net.zero_grad()#清零梯度
loss.backward()#自动计算梯度,反向传递

import torch.optim as optim#用于更新权重
optimizer = optim.SGD(net.parameters(),lr=0.01) #权重更新规则
                                                #使用SGD规则,更新net中的全部parameters;更新的学习速率(lr)为0.01
optimizer.step()

#再次运行神经网络
out=net(input_data)
print(out)
print(out.size())

#重新计算损失
loss=criterion(out,target)
print(loss)

  目前不清楚代码到底是干什么的,不过知道的是训练后随机和目标值之间的差距减小了。目前这个五层的神经网络能做到的是,通过训练使得输入值更接近目标值,里面还有好多函数不清楚,这段代码要看一段时间了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值