0


fashion_mnist--Kaggle 入门篇

1.介绍

import paddle
import paddle.vision.transforms as T
import pandas as pd
import numpy as np
from numpy import array
import matplotlib.pyplot as plt
import paddle.nn.functional as F

2.kaggle项目介绍

此次竞赛是对fashion_mnist进行分类,并以最后准确率作为评分。

2.1数据集介绍

在这里插入图片描述

2.2可视化(训练集)

数据

3.数据集封装

因为比赛中给的数据集为1x784维度(如图),在这里插入图片描述

我们需要将数据转化为LeNet模型输入的标准形式[1x28x28]维度,因此对数据集进行预处理与封装与训练集,测试集,验证集划分,代码如下:

from paddle.io import Dataset
#继承paddle.io.Dataset类classmyDataset(Dataset):def__init__(self, data=None,mode='train',transform=None,val_split=0.2):#初始化if mode in['train','val']:
            data=pd.read_csv('../kaggle_data/data/fashion-mnist_train.csv')
            np.random.seed(43)
            data=array(data)
            np.random.shuffle(data)
            data_len =len(data)
            val_set_size =int(data_len*val_split)if mode =='val':
                data = data[:val_set_size,:]elif mode =='train':
                 data = data[val_set_size:,:]elif mode =='test':
            data=pd.read_csv('../kaggle_data/data/fashion-mnist_test.csv')
            data=array(data)
            
        train_label=data[:,0]
        self.label = train_label
        self.data=data[:,1:]def__getitem__(self, idx):#实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签)
        image=self.data[idx]
        label=self.label[idx]
        
        image=image.reshape(1,28,28)
        image=(image-127.5)/127.5
        image = np.array(image, dtype='float32')
        image=paddle.to_tensor(image)return image,int(label)def__len__(self):returnlen(self.label)# 返回数据集大小,即图片的数量
train_dataset=myDataset()#读取训练集
val_dataset=myDataset(mode='val')#验证集
test_dataset=myDataset(mode='test')#测试集

以上,我们就以及将数据部分处理完毕,下面开始网络的构建。

4.模型组建

4.1继承paddle.nn.Layer

classLeNet(paddle.nn.Layer):#继承paddle.nn.Layerdef__init__(self):#初始化我们所需要用到的网络层结构super(LeNet, self).__init__()

        self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
        self.max_pool1 = paddle.nn.MaxPool2D(kernel_size=2,  stride=2)
        self.conv2 = paddle.nn.Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1)
        self.max_pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
        self.linear1 = paddle.nn.Linear(in_features=16*5*5, out_features=120)
        self.linear2 = paddle.nn.Linear(in_features=120, out_features=84)
        self.linear3 = paddle.nn.Linear(in_features=84, out_features=10)defforward(self, inputs):#将网络按照顺序‘联’起来
        y = self.conv1(inputs)
        y = F.relu(y)
        y = self.max_pool1(y)
        y = F.relu(y)
        y = self.conv2(y)
        y = self.max_pool2(y)
        y = paddle.flatten(y, start_axis=1,stop_axis=-1)
        y = self.linear1(y)
        y = F.relu(y)
        y = self.linear2(y)
        y = F.relu(y)
        y = self.linear3(y)return y

网络结构可视化:

model = paddle.Model(LeNet())
model.summary((-1,1,28,28))

在这里插入图片描述

4.2模型编译(优化器与损失函数)

model.prepare(paddle.optimizer.Adam(learning_rate=0.0001, parameters=model.parameters()), 
              paddle.nn.CrossEntropyLoss(), 
              paddle.metric.Accuracy())#loss:交叉熵;优化器:adam;评价指标:Accuracy(准确率)

以上,数据的准备和模型的搭建已经完成了,下面就是训练部分

5.模型训练

使用高阶API一行代码就可以完成了

model.fit(train_data=train_dataset, epochs=50, batch_size=30, verbose=1,eval_data=val_dataset)

在这里插入图片描述

  • epochs, batch_size,learning_rate等超参数大家都可以自行设定,试一试能不能使模型更好。

6.最后–结果的输出

pred_result=model.predict(test_dataset)#将我们的测试集用训练好的模型预测,结果存在pred_result
re=array(pred_result[0])[:,0,:].argmax(1)
df=pd.DataFrame(re)
df.to_csv('result.csv')

再将我们的结果格式稍作修改,即可上交:
在这里插入图片描述

标签: python

本文转载自: https://blog.csdn.net/m0_48055133/article/details/123753803
版权归原作者 我才三分醉 所有, 如有侵权,请联系我们删除。

“fashion_mnist--Kaggle 入门篇”的评论:

还没有评论