PaddlePaddle第一周学习心得

PaddlePaddle第一周学习心得

  • PaddlePaddle课程心得体会
    • PaddlePaddle学习框架
    • 一些课程作业的代码

PaddlePaddle课程心得体会

学习的这项免费课程来自毕然老师的《百度架构师手把手带你零基础实践深度学习》,是一个21天的理论+实践课程。非常感谢得到这样一个学习机会~
本人基础:数学基础知识薄弱,R语言熟练掌握,学习过深度神经网络的基础知识,跑过R语言中H2O、deepnet包的demo并进行过小的实验
在本次课程中的诉求:快速掌握Python语法并进行一定的深度学习实践
第一周的心得体会:总体来讲作为一门免费课程,课程的含金量非常高(对于我这种python+数学小白),每一节课的内容都非常充实。
第一周的内容主要学习了两个章节:
第一章节是深度学习的零基础入门,讲解了一些概念,从生动有趣的理论讲解再到细节的代码实践(真的是非常扎实地用python语句完成了所有的实践,学习代码的过程中也让我对python语法有了一些理解),再到使用飞桨平台的代码对比,发现飞桨平台真的非常友好,它有固定的语句编写程式,能让你更加专注于任务本身而不是纠结在代码实现。
第二章则是用mnist手写字体识别数据库进行了基于飞桨平台的深度学习完整实现。
在学习的过程中虽然遇到非常多的困难和问题,但不断查阅资料为自己解答困惑的过程也非常有意思(虽然还是有很多坑没啃掉orz)希望第二周再接再厉!

PaddlePaddle学习框架

图片摘自https://blog.csdn.net/weixin_44095278/article/details/107927546。
该教程使用的是“横纵式”教学法。在“横纵式”教学法中,纵向概要介绍模型的基本代码结构和极简实现方案。横向深入探讨构建模型的每个环节中,更优但相对复杂的实现方案。例如在模型设计环节,除了在极简版本使用的单层神经网络(与房价预测模型一样)外,还可以尝试更复杂的网络结构,如多层神经网络、加入非线性的激活函数,甚至专门针对视觉任务优化的卷积神经网络。
PaddlePaddle第一周学习心得_第1张图片

一些课程作业的代码

PS:(没有跑通(卑微))

# 加载飞桨和相关数据处理的库
import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph.nn import Linear
import numpy as np
import os
import gzip
import json
import random


def load_data(mode='train'):
    # 读取cifar数据
    trainset = paddle.dataset.cifar.train10(cycle=False)
    train_reader = paddle.batch(trainset, batch_size=8)
    print('cifar dataset load done')

    testset = paddle.dataset.cifar.test10(cycle=False)
    test_reader = paddle.batch(testset, batch_size=8)

    imgs, labels = trainset[0], trainset[1]
   # 数据集相关参数,图片高度IMG_ROWS, 图片宽度IMG_COLS
    IMG_ROWS = 32
    IMG_COLS = 32
  # 校验数据
    imgs_length = len(imgs)

    assert len(imgs) == len(labels), \
          "length of train_imgs({}) should be the same as train_labels({})".format(len(imgs), len(label))
    
    # 获得数据集长度
    imgs_length = len(imgs)
    
    # 定义数据集每个数据的序号,根据序号读取数据
    index_list = list(range(imgs_length))
    # 读入数据时用到的批次大小
    BATCHSIZE = 100
    
    # 定义数据生成器
    def data_generator():
        if mode == 'train':
            # 训练模式下打乱数据
            random.shuffle(index_list)
        imgs_list = []
        labels_list = []
        for i in index_list:
            # 将数据处理成希望的格式,比如类型为float32,shape为[1, 28, 28]
            img = np.reshape(imgs[i], [1, IMG_ROWS, IMG_COLS]).astype('float32')
            label = np.reshape(labels[i], [1]).astype('float32')
            imgs_list.append(img) 
            labels_list.append(label)
            if len(imgs_list) == BATCHSIZE:
                # 获得一个batchsize的数据,并返回
                yield np.array(imgs_list), np.array(labels_list)
                # 清空数据读取列表
                imgs_list = []
                labels_list = []
                   
        # 如果剩余数据的数目小于BATCHSIZE,
        # 则剩余数据一起构成一个大小为len(imgs_list)的mini-batch
        if len(imgs_list) > 0:
            yield np.array(imgs_list), np.array(labels_list)
    return data_generator


# 声明数据读取函数,从训练集中读取数据
train_loader = data_generator
# 以迭代的形式读取数据
for batch_id, data in enumerate(train_loader()):
    image_data, label_data = data
    if batch_id == 0:
        # 打印数据shape和类型
        print("打印第一个batch数据的维度:")
        print("图像维度: {}, 标签维度: {}".format(image_data.shape, label_data.shape))
    break

你可能感兴趣的:(PaddlePaddle第一周学习心得)