代码pytorch搭建多分支输入网络 pytorch多分类问题_pytorch

# 定义网络
class Classifier_fashion(nn.Module):
	def __init__(self):
		super().__init__()
		self.layer1 = nn.Linear(784,256)
 
	def forward(self, x):
		x = x.view(x.shape[0],-1)
		x= F.log_softmax(self.layer1(x), dim=1)
		return x
		
model = Classifier_fashion()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(),lr=0.003)

for e in range(epochs):
	running_loss = 0
	for images, labels in trainloader:
		log_ps = model(images)
		loss = criterion(log_ps, labels)
		optimizer.zero_grad()
		loss.backward()
		optimizer.step()
		running_loss += loss.item()
		print("Trainning loss:{}".format(running_loss/len(trainloader)))

Softftmax多分类问题

pytorch搭建多分支输入网络 pytorch多分类问题_pytorch_02


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch_03


pytorch搭建多分支输入网络 pytorch多分类问题_深度学习_04


pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_05


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_06

pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_07


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch_08

pytorch搭建多分支输入网络 pytorch多分类问题_pytorch_09


pytorch搭建多分支输入网络 pytorch多分类问题_分类_10


Softftmax的实现

pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_11

一张长和宽都为28,通道数为1,输入是一个向量,将图片拉成一个向量,会损失许多空间信息,这部分留给卷积神经网络处理。

pytorch搭建多分支输入网络 pytorch多分类问题_深度学习_12

Softmax操作:

矩阵的按轴求和

pytorch搭建多分支输入网络 pytorch多分类问题_深度学习_13


pytorch搭建多分支输入网络 pytorch多分类问题_分类_14

pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_15


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_16


交叉熵损失:

细节:举例说明如何根据索引拿出样本的预测值

pytorch搭建多分支输入网络 pytorch多分类问题_pytorch_17


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_18


pytorch搭建多分支输入网络 pytorch多分类问题_分类_19


预测正确的概率为0.5

pytorch搭建多分支输入网络 pytorch多分类问题_分类_20


Accumulator的实现:

pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_21

实现整个模型:

pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_22

pytorch搭建多分支输入网络 pytorch多分类问题_分类_23


pytorch搭建多分支输入网络 pytorch多分类问题_深度学习_24

SGD

pytorch搭建多分支输入网络 pytorch多分类问题_深度学习_25


结果

pytorch搭建多分支输入网络 pytorch多分类问题_分类_26

pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_27


pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_28


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_29


pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_30


pytorch搭建多分支输入网络 pytorch多分类问题_仿射变换_31


pytorch搭建多分支输入网络 pytorch多分类问题_pytorch搭建多分支输入网络_32

#%%

# 加载Fashion-MNIST
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
# import helper

# 下载数据并将所有数据转换为 𝐓𝐞𝐧𝐬𝐨𝐫 ,train为是否训练数据集,download默认网上下载
mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=False, transform=transforms.ToTensor()) 
mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=False, download=False, transform=transforms.ToTensor())

# 通过 𝐃𝐚𝐭𝐚𝐋𝐨𝐚𝐝𝐞𝐫 读取小批量数据样本,shuffle是否打乱顺序,num_workers为进程的个数
batch_size = 256 
trainloader = torch.utils.data.DataLoader(mnist_train, batch_size=256, shuffle=True, num_workers=1) 
testloader = torch.utils.data.DataLoader(mnist_test, batch_size=500*20, shuffle=False, num_workers=1)

#%%

# TODO: Define your network architecture here
from torch import nn, optim
import torch.nn.functional as F

class Classifier_fashion(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer1 = nn.Linear(784,256)
    
    def forward(self, x):
        x = x.view(x.shape[0],-1)
        x = F.log_softmax(self.layer1(x), dim=1)
        return x


#%%

# TODO: Create the network, define the criterion and optimizer
model = Classifier_fashion()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(),lr=0.003)


#%%

# TODO: Train the network here
epochs = 5
batch_size = 10

for e in range(epochs):
    running_loss = 0
    for images, labels in trainloader:
        log_ps = model(images)
        loss = criterion(log_ps, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print("Trainning loss:{}".format(running_loss/len(trainloader)))