李宏毅机器学习作业三

前言

项目三是训练一个简单的卷积神经网络,实现食物图片的分类。现在还没有完成,在这里做一个记录。第三个作业比前面两个难了不少,遇到了很多困难,首先还是去理解老师已经给出的代码。这里用了paddlepaddle的深度学习框架,代码里碰到很多不懂的api就去paddlepaddle官网找文档然后加了注释。现在代码已经理解了但是运行还有一些错误。

 

 数据集分别为training、validation 以及 testing
training 以及 validation 中的照片名称格式为 [类别]_[编号].jpg,例如 3_100.jpg 即为类别 3 的照片(编号不重要)

四个步骤:

1.定义数据集

2.模型结构

3.模型训练

4.测试

一、定义数据集

在 paddle 中,我们可以利用 paddle.io 的 Dataset 及 DataLoader 来"包装"数据,使后续的训练及预测更为方便。 Dataset 需要 overload 两个函数:len 及 getitem len 必须要回传 dataset 的大小,而 getitem 则定义了当函数利用 [idx] 取值时,数据集应该要怎么回传数据。 实际上我们并不会直接使用到这两个函数,但是使用 DataLoader 在 enumerate Dataset 时会使用到,没有做的话会在运行阶段出现错误。

# Import需要的套件
import os
import cv2
import time
import numpy as np
import paddle
from paddle.io import Dataset, DataLoader
from paddle.nn import Sequential, Conv2D, BatchNorm2D, ReLU, MaxPool2D, Linear, Flatten
from paddle.vision.transforms import Compose, Transpose, RandomRotation, RandomHorizontalFlip, Normalize, Resize
# 分配CPU设备
place = paddle.CPUPlace()
paddle.disable_static(place)
print(paddle.__version__)

# 在框架下不用open一个文件然后去读,而是聚成一个dataset基类,再定义一个业务类FoodDataset,然后在initial方法里面传入必要的一些组件
class FoodDataset(Dataset):
    def __init__(self, image_path, image_size=(128, 128), mode='train'):
        self.image_path = image_path            #传递路径
        self.image_file_list = sorted(os.listdir(image_path)) #os.listdir(path)返回指定的文件夹包含的文件或文件夹的名字的列表。
        self.mode = mode
        # training 时做 data augmentation
        self.train_transforms = Compose([      #数据增强组件
            Resize(size=image_size),           #缩放
            RandomHorizontalFlip(),            #依据概率p对图片进行水平翻转,p默认0.5
            RandomRotation(15),                #中心旋转随机(-15,15)度
            
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值