我是靠谱客的博主 小巧黑米,最近开发中收集的这篇文章主要介绍飞桨paddlepaddle深度学习实战——学习笔记(第三章飞桨实践)第三章学习笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

@[TOC] 第三章 paddlepaddle实践

第三章学习笔记

# 定义reader
# 定义buf_size和batch_size大小
buf_size = 1000
batch_size = 256

# 训练集reader
train_reader = fluid.io.batch(
    reader=paddle.reader.shuffle(
        reader=read_data(TRAIN_SET),
        buf_size=buf_size
    ),
    batch_size=batch_size
)
# 测试集reader
test_reader = fluid.io.batch(
    reader=paddle.reader.shuffle(
        reader=read_data(TEST_SET),
        buf_size=buf_size
    ),
    batch_size=batch_size
)
# 定义飞桨动态图工作环境
with fluid.dygraph.guard():
    # 实例化模型
    # Softmax分类器
    model = SoftmaxRegression('catornocat')
    
    # 开启模型训练模式
    model.train()
    # 使用Adam优化器
    # 学习率为0.01
    opt = fluid.optimizer.Adam(learning_rate=0.01, parameter_list=model.parameters())
    # 迭代次数设为200
    EPOCH_NUM = 200

这里的EPOCH_NUM是经历了多少代,
主要是下面这段代码自己琢磨了很长时间
首先贴张图
这张图我是从别的博客上面的截图,
博客接链,可以看下这篇文章
在这里插入图片描述
上面的代码定义了EPOCH_NUM=200
buf_size=1000,这个可以理解为开辟的内存空间,
batch_size=256,
看了上面的截图,就能理解这个batch_size的意思了,这个意思是所有的训练集样本分批处理,分了多少批呢,不知道,只知道一批里面包含的样本数量是256个,也就是256张图片,所以没必要定义多少批,只是定义一批是多少就行,最后一批是多少张图片就看训练集有多少张图了
比如:训练集有257张图片,设置的batch_size=256,那么就分成了两批,第一批是256张图,第二批是1张图,

这本书第三章paddle实现里面的代码,猫的训练集有209张图片,所以就分了一批,


import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph import Linear
from the_functions import *
from the_third_regression import *
import numpy as np


# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    #加载数据
    np.set_printoptions(threshold=np.inf)
    TRAIN_SET,TEST_SET,DATA_DIM,CLASSES=get_data()
    #print(TRAIN_SET)
    #定义reader
    #定义内存大小和批次数量
    buf_size=500
#批次的尺寸是256,也就是一批里面又256条数据,但是这个数据集一共209条数据,所以就一个批次
    batch_size=120
    #训练集reader生成器
    #这个可以理解为输入输出io的batch(训练集数据,批次大小为256)把1000条数据打乱,再256一批的训练
    train_reader = fluid.io.batch(
        reader=paddle.reader.shuffle(
            reader=read_data(TRAIN_SET),
            buf_size=buf_size
        ),
        batch_size=batch_size
    )
    print(train_reader)
    print(type(train_reader))
    # 测试集reader,测试集数据生成器
    test_reader = fluid.io.batch(
        reader=paddle.reader.shuffle(
            reader=read_data(TEST_SET),
            buf_size=buf_size
        ),
        batch_size=batch_size
    )
    #定义飞桨动态图工作环境
    with fluid.dygraph.guard():
        model=SoftmaxRegression('catornocat')
        model.train()
        #定义优化器Adam
        opt=fluid.optimizer.Adam(learning_rate=0.01,parameter_list=model.parameters())
        EPOCH_NUM=3

    with fluid.dygraph.guard():
        costs=[]
        print('train_reader的类型是:',type(train_reader()))
        for pass_num in range(EPOCH_NUM):
            print('第{}次'.format(pass_num))
            #print(pass_num)
            #定义内层循环,训练集大概是500条数据,分成了两批
            for batch_id,data in enumerate(train_reader()):
                #调整数据shape使之适合模型
                print('batch_id为{},'.format(batch_id))
                images=np.array([x[0].reshape(DATA_DIM) for x in data],np.float32)
                print(images.shape)

比如上面这个代码,我把批的大小改成了120,经历代数是3,打印出来第几次 批次号如下图

在这里插入图片描述
可以看出每个所有数据的大循环都是209条数据,120一批次,分成了两个批次,一个是120条数据,第二批次是89条数据,

with fluid.dygraph.guard():
    # 记录每次的损失值,用于绘图
    costs = []
    # 定义外层循环
    for pass_num in range(EPOCH_NUM):
        # 定义内层循环
        for batch_id,data in enumerate(train_reader()):
            # 调整数据shape使之适合模型
            images = np.array([x[0].reshape(DATA_DIM) for x in data],np.float32)
            labels = np.array([x[1] for x in data]).astype('int64').reshape(-1,1)
            
            # 将numpy数据转为飞桨动态图variable形式
            image = fluid.dygraph.to_variable(images)
            label = fluid.dygraph.to_variable(labels)
            
            # 前向计算
            predict = model(image)

            # 计算损失
            # 使用交叉熵损失函数
            loss = fluid.layers.cross_entropy(predict,label)
            avg_loss = fluid.layers.mean(loss)

            # 计算精度
            # acc = fluid.layers.accuracy(predict,label)
            
            # 绘图
            costs.append(avg_loss.numpy()[0])
            draw_line(costs, 0.01)

            # 反向传播
            avg_loss.backward()
            # 最小化loss,更新参数
            opt.minimize(avg_loss)
            # 清除梯度
            model.clear_gradients()

    # 保存模型文件到指定路径
    fluid.save_dygraph(model.state_dict(), 'catornocat')

最后

以上就是小巧黑米为你收集整理的飞桨paddlepaddle深度学习实战——学习笔记(第三章飞桨实践)第三章学习笔记的全部内容,希望文章能够帮你解决飞桨paddlepaddle深度学习实战——学习笔记(第三章飞桨实践)第三章学习笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部