分类输出为多输出
step1:对类别进行编码
比较真实值的概率与预测值的概率计算损失。
fashion_minist数据训练:
数据读取模块:
import numpy as np
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
d2l.use_svg_display()
#通过ToTensor实例将图像数据从PIL变换成32为浮点数格式
#并除去255使得所有像素的数值在0到1之间
trans=transforms.ToTensor()
#dataset下载数据
mnist_train=torchvision.datasets.FashionMNIST(root="../data",train=True,#下载的训练数据集,train=True表示拿到的数据为Tensor而不是图片
transform=trans,
download=True)
mnist_test=torchvision.datasets.FashionMNIST(root="../data",train=False,#测试数据集用于验证模型的好坏
transform=trans,
download=True)
print(len(mnist_train),len(mnist_test))#train的大小为60000,test大小为10000
print(mnist_train[0][0].shape)#第一张图片的大小 tensor.Size([1,28,28])为黑白图片,因此通道数为1,大小28*28
def get_fashion_mnist_labels(labels):
text_labels=[
't-shirt','trouser','pullover','dress','coat','sandal','shirt',
'sneaker','bag','ankle boot'
]
return [text_labels[int(i)] for i in labels]
def show_images(imgs,num_rows,num_cols,titles=None,scale=1.5):
"""" Plot a list of images"""
figsize=(num_cols*scale,num_rows*scale)
_,axes=d2l.plt.subplots(num_rows,num_cols,figsize=figsize)
axes=axes.flatten()
for i,(ax,img) in enumerate(zip(axes,imgs)):
if torch.is_tensor(img):
#图片张量
ax.imshow(img.numpy())
ax.axes.get_xaxis().set_visible(False)#横坐标不展示
ax.axes.get_yaxis().set_visible(False)#纵坐标不显示
else:#PIL图片
ax.imshow(img)
if titles:
ax.set_title(titles[i])#显示标题
return axes
X,y=next(iter(data.DataLoader(mnist_train,batch_size=18)))
show_images(X.reshape(18,28,28),2,9,titles=get_fashion_mnist_labels(y))
d2l.plt.show()