Paddle3
一. 深度学习的四个步骤
数据标签处理,构建网络模型,规划网络超参,训练评估模型。这四个步骤很重要,能处理手势识别的问题。
二.详细过程
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
# 生成图像列表 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(‘列表已生成‘)
# 定义训练集和测试集的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)
#定义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
三.结果及总结
对于过程还是不是很熟悉,包括语法也不是很熟悉。还是要勤加练习。
原文:https://www.cnblogs.com/h327/p/13588011.html