DataFountain-FashionMNIST:CNN基础 准确率0.85


图像分类(image classification)是计算机视觉领域中最简单最基础的任务,学习研究图像分类是每个计算机视觉研究者的必经之路,图像分类网络也是很多更复杂任务(如目标检测、语义分割等)算法的基础。本练习赛旨在让选手们用图像分类任务来以赛代练、熟悉深度学习框架和比赛流程。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

datafountain-fashionmnist:cnn基础 准确率0.85 -

赛题介绍

赛题背景

图像分类(image classification)是计算机视觉领域中最简单最基础的任务,学习研究图像分类是每个计算机视觉研究者的必经之路,图像分类网络也是很多更复杂任务(如目标检测、语义分割等)算法的基础。本练习赛旨在让选手们用图像分类任务来以赛代练、熟悉深度学习框架和比赛流程。

在图像分类学习中,MNIST数据集常被用来作为入门教学数据集。但是,MNIST数据集存在一些问题:首先,MNIST数据集对于现在的卷积神经网络来说过于简单,SOTA模型的分类精度达到了99.84%,甚至传统机器学习方法也能达到97%的精度,因此模型的精度在此达到了饱和,几乎没有提升的空间;再者,有些专家对MNIST数据集提出了质疑,比如谷歌的深度学习专家、Keras的作者François Chollet曾表示:“MNIST存在很多问题,但最重要的是,它真的不具有计算机视觉任务的代表性。”并补充道:“很多好点子(比如batch norm)在MNIST上效果差,但相反的,一些差的方法可能在MNIST产生好效果,却不能迁移到真实计算机视觉任务中。”

数据说明

本练习赛采用和MNIST同等规模但更有难度的数据集Fashion-MNIST(github链接:https://github.com/zalandoresearch/fashion-mnist),Fashion-MNIST由60000张训练集图像、10000张测试集图像及对应的标签构成,每张图像是分辨率为28x28的灰度图像,包含10种分类:T恤、裤子、套头衫、连衣裙、大衣、凉鞋、衬衫、运动鞋、包、短靴。

Openflow Openflow

一键极速绘图,赋能行业工作流

Openflow 88 查看详情 Openflow

本练习赛的参赛者可以使用Tensorflow、Keras、Pytorch、Paddlepaddle等开源深度学习框架来进行模型的搭建、训练和预测。

In [1]
import pandas as pdimport numpy as np# 数据读取train_df = pd.read_csv('fashion-mnist_train.csv')
test_df = pd.read_csv('fashion-mnist_test_data.csv')
    In [2]
train_df.head()
       
   label  pixel1  pixel2  pixel3  pixel4  pixel5  pixel6  pixel7  pixel8  \
0      2       0       0       0       0       0       0       0       0   
1      9       0       0       0       0       0       0       0       0   
2      6       0       0       0       0       0       0       0       5   
3      0       0       0       0       1       2       0       0       0   
4      3       0       0       0       0       0       0       0       0   

   pixel9  ...  pixel775  pixel776  pixel777  pixel778  pixel779  pixel780  \
0       0  ...         0         0         0         0         0         0   
1       0  ...         0         0         0         0         0         0   
2       0  ...         0         0         0        30        43         0   
3       0  ...         3         0         0         0         0         1   
4       0  ...         0         0         0         0         0         0   

   pixel781  pixel782  pixel783  pixel784  
0         0         0         0         0  
1         0         0         0         0  
2         0         0         0         0  
3         0         0         0         0  
4         0         0         0         0  

[5 rows x 785 columns]
               

数据可视化

In [3]
%pylab inline# 绘制10*10的图片plt.figure(figsize=(10, 10))for idx in range(100):    # 图片尺寸从784 -》 28 * 28
    xy = train_df.iloc[idx].values[1:].reshape(28,28)
    plt.subplot(10, 10, idx+1)    # 展示图片
    plt.imshow(xy, cmap='gray')
    plt.xticks([]); plt.yticks([])
       
Populating the interactive namespace from numpy and matplotlib
       
<Figure size 720x720 with 100 Axes>
                In [4]
import paddle
paddle.__version__
       
'2.2.0'
               

数据读取

In [5]
from paddle.io import DataLoader, Datasetfrom PIL import Image# 自定义数据集完成数据读取class MyDataset(Dataset):
    def __init__(self, img, label):
        super(MyDataset, self).__init__()
        self.img = img
        self.label = label    
    def __getitem__(self, index):
        img = self.img[index]        # 对数据集进行归一化
        return img/255, int(self.label[index])    def __len__(self):
        return len(self.label)# 使用5.9w进行训练train_dataset = MyDataset(
    train_df.iloc[:-1000, 1:].values.reshape(59000, 28, 28).astype(np.float32), 
    paddle.to_tensor(train_df.label.iloc[:-1000].values.astype(np.float32))
)
train_loader = DataLoader(train_dataset, batch_size=300, shuffle=True)# 最后1k作为验证集val_dataset = MyDataset(
    train_df.iloc[-1000:, 1:].values.reshape(1000, 28, 28).astype(np.float32), 
    paddle.to_tensor(train_df.label.iloc[-1000:].values.astype(np.float32))
)
val_loader = DataLoader(val_dataset, batch_size=300, shuffle=False)# 最终测试集test_dataset = MyDataset(
    test_df.iloc[:, 1:].values.reshape(10000, 28, 28).astype(np.float32),
    paddle.to_tensor(np.zeros((test_df.shape[0])))
)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
   

全连接模型

In [6]
# 构建全连接模型,先需要从多维转变为二维model = paddle.nn.Sequential(
    paddle.nn.Flatten(),
    paddle.nn.Linear(28*28,128),
    paddle.nn.LeakyReLU(),
    paddle.nn.Linear(128, 10)
)

paddle.summary(model, (64, 28, 28))
       
W1207 20:53:04.353837   104 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1207 20:53:04.359086   104 device_context.cc:465] device: 0, cuDNN Version: 7.6.
       
---------------------------------------------------------------------------
 Layer (type)       Input Shape          Output Shape         Param #    
===========================================================================
   Flatten-1       [[64, 28, 28]]         [64, 784]              0       
   Linear-1         [[64, 784]]           [64, 128]           100,480    
  LeakyReLU-1       [[64, 128]]           [64, 128]              0       
   Linear-2         [[64, 128]]            [64, 10]            1,290     
===========================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0
---------------------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 0.51
Params size (MB): 0.39
Estimated Total Size (MB): 1.09
---------------------------------------------------------------------------
       
{'total_params': 101770, 'trainable_params': 101770}
                In [7]
# 定义优化器,损失函数optimizer = paddle.optimizer.Adam(parameters=model.parameters(), learning_rate=0.0001)
criterion = paddle.nn.CrossEntropyLoss()# 每个epoch迭代训练#     每个batch -> 正向传播 -> 计算损失 -> 更新参数for epoch in range(0, 5):
    Train_Loss, Val_Loss = [], []
    Train_ACC, Val_ACC = [], []    # 训练部分
    model.train()    for i, (x, y) in enumerate(train_loader):
        pred = model(x)
        loss = criterion(pred, y)
        Train_Loss.append(loss.item())
        loss.backward()
        optimizer.step()
        optimizer.clear_grad()
        Train_ACC.append((pred.numpy().argmax(1) == y.numpy()).mean())        
        if i % 100 == 0:            print(f'{i}/{len(train_loader)}\t Loss {np.mean(Train_Loss):3.5f} {np.mean(Train_ACC):3.5f}')    # 验证部分
    model.eval()    for i, (x, y) in enumerate(val_loader):
        pred = model(x)
        loss = criterion(pred, y)
        Val_Loss.append(loss.item())
        Val_ACC.append((pred.numpy().argmax(1) == y.numpy()).mean())    
    if epoch % 1 == 0:        print(f'\nEpoch: {epoch}')        print(f'Loss {np.mean(Train_Loss):3.5f}/{np.mean(Val_Loss):3.5f}')        print(f'ACC {np.mean(Train_ACC):3.5f}/{np.mean(Val_ACC):3.5f}')
       
0/197	 Loss 2.33518 0.17000
100/197	 Loss 1.50995 0.55713

Epoch: 0
Loss 1.20884/0.83340
ACC 0.63190/0.71083
0/197	 Loss 0.77190 0.74667
100/197	 Loss 0.73694 0.76122

Epoch: 1
Loss 0.69631/0.65332
ACC 0.77584/0.77250
0/197	 Loss 0.61251 0.80333
100/197	 Loss 0.60704 0.80515

Epoch: 2
Loss 0.59082/0.57583
ACC 0.80878/0.80167
0/197	 Loss 0.52229 0.84333
100/197	 Loss 0.55234 0.81921

Epoch: 3
Loss 0.53963/0.53572
ACC 0.82233/0.80417
0/197	 Loss 0.54005 0.81667
100/197	 Loss 0.51667 0.82782

Epoch: 4
Loss 0.50867/0.50455
ACC 0.83046/0.82083
       

卷积模型

In [11]
# 卷积模型model = paddle.nn.Sequential(
    paddle.nn.Conv2D(1, 10, (5, 5)),
    paddle.nn.ReLU(),
    paddle.nn.Conv2D(10, 20, (5, 5)),
    paddle.nn.ReLU(),
    paddle.nn.MaxPool2D((2, 2)),

    paddle.nn.Flatten(),
    paddle.nn.Linear(2000, 10),
)

paddle.summary(model, (64, 1, 28, 28))
       
---------------------------------------------------------------------------
 Layer (type)       Input Shape          Output Shape         Param #    
===========================================================================
   Conv2D-5      [[64, 1, 28, 28]]     [64, 10, 24, 24]         260      
    ReLU-5       [[64, 10, 24, 24]]    [64, 10, 24, 24]          0       
   Conv2D-6      [[64, 10, 24, 24]]    [64, 20, 20, 20]        5,020     
    ReLU-6       [[64, 20, 20, 20]]    [64, 20, 20, 20]          0       
  MaxPool2D-4    [[64, 20, 20, 20]]    [64, 20, 10, 10]          0       
   Flatten-4     [[64, 20, 10, 10]]       [64, 2000]             0       
   Linear-5         [[64, 2000]]           [64, 10]           20,010     
===========================================================================
Total params: 25,290
Trainable params: 25,290
Non-trainable params: 0
---------------------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 15.40
Params size (MB): 0.10
Estimated Total Size (MB): 15.68
---------------------------------------------------------------------------
       
{'total_params': 25290, 'trainable_params': 25290}
                In [12]
# 优化器与损失函数optimizer = paddle.optimizer.Adam(parameters=model.parameters(), learning_rate=0.0001)
criterion = paddle.nn.CrossEntropyLoss()# 训练部分for epoch in range(0, 5):
    Train_Loss, Val_Loss = [], []
    Train_ACC, Val_ACC = [], []

    model.train()    for i, (x, y) in enumerate(train_loader):
        pred = model(x.reshape((-1, 1, 28, 28)))
        loss = criterion(pred, y)
        Train_Loss.append(loss.item())
        loss.backward()
        optimizer.step()
        optimizer.clear_grad()
        Train_ACC.append((pred.numpy().argmax(1) == y.numpy()).mean())        
        if i % 100 == 0:            print(f'{i}/{len(train_loader)}\t Loss {np.mean(Train_Loss):3.5f} {np.mean(Train_ACC):3.5f}')

    model.eval()    for i, (x, y) in enumerate(val_loader):
        pred = model(x.reshape((-1, 1, 28, 28)))
        loss = criterion(pred, y)
        Val_Loss.append(loss.item())
        Val_ACC.append((pred.numpy().argmax(1) == y.numpy()).mean())    
    if epoch % 1 == 0:        print(f'\nEpoch: {epoch}')        print(f'Loss {np.mean(Train_Loss):3.5f}/{np.mean(Val_Loss):3.5f}')        print(f'ACC {np.mean(Train_ACC):3.5f}/{np.mean(Val_ACC):3.5f}')
       
0/197	 Loss 2.29863 0.15333
100/197	 Loss 1.61717 0.53125

Epoch: 0
Loss 1.23357/0.74845
ACC 0.62601/0.74167
0/197	 Loss 0.73336 0.76000
100/197	 Loss 0.66099 0.76261

Epoch: 1
Loss 0.63249/0.61879
ACC 0.77187/0.77333
0/197	 Loss 0.56483 0.80000
100/197	 Loss 0.55956 0.79855

Epoch: 2
Loss 0.54548/0.56240
ACC 0.80436/0.79167
0/197	 Loss 0.58850 0.77333
100/197	 Loss 0.51179 0.81703

Epoch: 3
Loss 0.50036/0.52460
ACC 0.82221/0.80583
0/197	 Loss 0.41658 0.86667
100/197	 Loss 0.47553 0.83274

Epoch: 4
Loss 0.47199/0.50074
ACC 0.83300/0.82333
       

以上就是DataFountain-FashionMNIST:CNN基础 准确率0.85的详细内容,更多请关注其它相关文章!


# 多维  # 大型社区网站建设  # 推广获客网络营销策略  # 抚顺网站建设机构推荐  # 贵阳网站优化厂家电话  # 360优化seo怎么样  # 南宁三月三营销与推广  # 铜梁水产业网站推广中心  # 微信网站建设福州  # 苏州市网站优化推广费用  # 东城区网站建设规定  # 在此  # 安装包  # 代练  # git  # 最简单  # 中文网  # 达到了  # 必经之路  # 一键  # 练习赛  # type  # fig  # latte  # igs  # red  # ai  # 谷歌 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 鉴智机器人发布基于地平线征程5的标准视觉感知产品  生成式AI引路产业加速来袭,微美全息探索“AIGC+虚拟人”融合应用  百亿量化私募:量化投资进入“精耕细作”时代 AI带来行业新变革  Win11 的画图应用将包含 Windows Copilot 的 AI 工具整合  “无人驾驶船”将首次亮相世界人工智能大会,下半年或开进上海迪士尼  AI无法对传统文化符号进行解构和创新  金山办公:AI是重要的产品战略之一  “木头姐”:特斯拉的人工智能训练——“赢家通吃”的机会  复旦发布「新闻推荐生态系统模拟器」SimuLine:单机支持万名读者、千名创作者、100+轮次推荐  月薪6万,哪些AI岗位在抢人?  RoboNeo操作教程  写出优质文章的妙招:利用"稿见AI助手"的实用指南  标小智LOGO推出AI公司起名生成器“Name.GPT”  传Meta 2025年推出首款AR眼镜,采用军用级别材料,计划生产1000台  如布AI口袋学习机S12 将亮相综艺节目《好样的!国货》  Meta发布语音AI模型 Voicebox 助虚拟助手与NPC对话  《上古卷轴5》AI高清材质包优化游戏中所有怪物  “风乌”气象大模型科学家团队:用AI预报极端天气未来不是梦!  猿力科技入选北京市通用人工智能产业创新伙伴计划  联合国秘书长称支持建立全球人工智能监管机构  谷歌AudioPaLM实现「文本+音频」双模态解决,说听两用大模型  2025WRC世界机器人大赛锦标赛(烟台)收官!斯坦星球勇夺VEX赛项冠亚军!  探展WAIC | 第四范式“式说”聚焦toB大模型,布局生成式AI重构企业软件  乐天派桌面机器人加入小米米家生态系统,实现与其他智能设备的互联  Midjourney 5.2震撼发布!原画生成3D场景,无限缩放无垠宇宙  人工智能赋能广西自然资源领域监测监管  IBM与NASA联手开源地理空间AI基础模型,促进气候科学领域进步  马斯克发推讽刺人工智能,机器学习本质是统计?  Meta发布音频AI模型,仅需2秒片段模拟真人语音  明略科技发布免费开源TensorBoard.cpp,促进大型模型的预训练工作  【趋势周报】全球元宇宙产业发展趋势:ChatGPT的出现,将元宇宙实现至少提前了10年  商汤科技:元萝卜 AI 下棋机器人新品发布会 6 月 14 日举行  GPT-4使用混合大模型?研究证明MoE+指令调优确实让大模型性能超群  论文插图也能自动生成了,用到了扩散模型,还被ICLR接收  人工智能和神经网络有什么联系与区别?  上天下海登极,青岛与昇腾AI握手一起探索星辰大海  苹果CEO库克:持续研究生成式人工智能技术  昇腾AI大模型训推一体化解决方案将在WAIC发布  如何成功实施人工智能?  绿联发布笑脸屏幕显示充电状态的30W/65W Q湃机器人充电器  Meta 开源 AI 语言模型 MusicGen,可将文本和旋律转化为完整乐曲  腾讯企点客服接待与营销分析能力升级!企业操作更高效、人机交互更智能  AI数字人业务频频获点赞,谦寻积极引领示范作用  Unity 内测 Safe Voice 服务,利用 AI 自动识别玩家不当聊天内容  全面拥抱大模型浪潮,ISC 2025打造全球首场AI数字安全峰会  揭晓2025年玻尔兹曼奖:Hopfield网络创始人荣获奖项  MiracleVision视觉大模型上线时间  随时随地,追踪每个像素,连遮挡都不怕的「追踪一切」视频算法来了  一次购买全年省心,入手科沃斯这几台机器人,省下时间就是金钱  财联社首档运用虚拟人技术播报栏目《AI半小时》今晚上线!敬请期待 

 2025-07-31

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.