Paddle3

Paddle3

一. 深度学习的四个步骤
数据标签处理,构建网络模型,规划网络超参,训练评估模型。这四个步骤很重要,能处理手势识别的问题。

二.详细过程

  1.  导入库文件
    import os
    import time
    import random
    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    import paddle
    import paddle.fluid as fluid
    import paddle.fluid.layers as layers
    from multiprocessing import cpu_count
    from paddle.fluid.dygraph import Pool2D,Conv2D
    from paddle.fluid.dygraph import Linear

     

  2. 数据标签处理
    # 生成图像列表
    data_path = 'Dataset'#这里是你的数据集路径
    character_folders = os.listdir(data_path)
    # print(character_folders)
    if(os.path.exists('./train_data.list')):
        os.remove('./train_data.list')
    if(os.path.exists('./test_data.list')):
        os.remove('./test_data.list')
        
    for character_folder in character_folders:
        
        with open('./train_data.list', 'a') as f_train:
            with open('./test_data.list', 'a') as f_test:
                if character_folder == '.DS_Store':
                    continue
                character_imgs = os.listdir(os.path.join(data_path,character_folder))
                count = 0 
                for img in character_imgs:
                    if img =='.DS_Store':
                        continue
                    if count%10 == 0:
                        f_test.write(os.path.join(data_path,character_folder,img) + '\t' + character_folder + '\n')
                    else:
                        f_train.write(os.path.join(data_path,character_folder,img) + '\t' + character_folder + '\n')
                    count +=1
    print('列表已生成')

     

  3. 使用训练集和训练集和测试集
    # 定义训练集和测试集的reader
    def data_mapper(sample):
        img, label = sample
        img = Image.open(img)
        img = img.resize((100, 100), Image.ANTIALIAS)
        img = np.array(img).astype('float32')
        img = img.transpose((2, 0, 1))
        img = img/255.0
        return img, label
    
    def data_reader(data_list_path):
        def reader():
            with open(data_list_path, 'r') as f:
                lines = f.readlines()
                for line in lines:
                    img, label = line.split('\t')
                    yield img, int(label)
        return paddle.reader.xmap_readers(data_mapper, reader, cpu_count(), 512)
    
    # 用于训练的数据提供器
    #buf_size是打乱数据集的参数,size越大,图片顺序越乱
    train_reader = paddle.batch(reader=paddle.reader.shuffle(reader=data_reader('./train_data.list'), buf_size=1024), batch_size=32)
    # 用于测试的数据提供器
    test_reader = paddle.batch(reader=data_reader('./test_data.list'), batch_size=32) 

     

  4. 建立神经网络
    #定义DNN网络
    class MyDNN(fluid.dygraph.Layer):
        def __init__(self, name_scope, num_classes=10):
            super(MyDNN, self).__init__(name_scope)
            name_scope = self.full_name()
    
            self.conv1 = Conv2D(num_channels=3, num_filters=96, filter_size=11, stride=4, padding=5, act='relu')
            self.pool1 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
            self.conv2 = Conv2D(num_channels=96, num_filters=256, filter_size=5, stride=1, padding=2, act='relu')
            self.pool2 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
            self.conv3 = Conv2D(num_channels=256, num_filters=384, filter_size=3, stride=1, padding=1, act='relu')
            self.conv4 = Conv2D(num_channels=384, num_filters=384, filter_size=3, stride=1, padding=1, act='relu')
            self.conv5 = Conv2D(num_channels=384, num_filters=256, filter_size=3, stride=1, padding=1, act='relu')
            self.pool5 = Pool2D(pool_size=2, pool_stride=2, pool_type='max')
            self.fc1 = Linear(input_dim=9216, output_dim=4096, act='relu')
            self.drop_ratio1 = 0.5
            self.fc2 = Linear(input_dim=4096, output_dim=4096, act='relu')
            self.drop_ratio2 = 0.5
            self.fc3 = Linear(input_dim=4096, output_dim=num_classes)
    
            
        def forward(self, x):
    
            x = self.conv1(x)
            x = self.pool1(x)
            x = self.conv2(x)
            x = self.pool2(x)
            x = self.conv3(x)
            x = self.conv4(x)
            x = self.conv5(x)
            x = self.pool5(x)
            x = fluid.layers.reshape(x, [x.shape[0], -1])
            x = self.fc1(x)
            # 在全连接之后使用dropout抑制过拟合
            x= fluid.layers.dropout(x, self.drop_ratio1)
            x = self.fc2(x)
            # 在全连接之后使用dropout抑制过拟合
            x = fluid.layers.dropout(x, self.drop_ratio2)
            x = self.fc3(x)
            return x

三.结果及总结

 

 

对于过程还是不是很熟悉,包括语法也不是很熟悉。还是要勤加练习。

 

posted @ 2020-08-31 09:52  乂小优  阅读(151)  评论(0编辑  收藏  举报