1 # 1、导入包 2 import paddle.fluid as fluid 3 import paddle 4 5 # 2、数据预处理 6 # 调整图片大小等---跟框架本身没有关系 7 8 # 3、构造reader---本质:读取数据 9 # (1)reader---获取一个样本数据 10 # 返回ndarray类型 或者元组 11 # def reader(): 12 # while True: 13 # yield numpy.random.uniform(-1,1,size=width*height) # 理解为返回的数据只有特征值 14 # yield numpy.random.uniform(-1,1,size=width*height),label # 返回一个样本,样本具有特征值与目标值 15 # (2) batch reader ----返回多个样本 16 # def reader(): 17 # while True: 18 # yield [(特征,目标),(特征,目标),(特征,目标),(特征,目标)]---特征值为ndarray类型,样本是具有特征值与目标值 19 # yield [(特征,),(特征,),(特征,),(特征,)]---特征值为ndarray类型,样本只含有特征值 20 # (3)reader creator ----返回一个reader函数 21 # (4)reader decorator:----返回将多个reader函数合并成一个reader函数 22 23 # 4、训练场所 24 # 指定CPU运行 25 place = fluid.CPUPlace() 26 # 指定GPU运行 27 # place= fluid.CUDAPlace(0) 28 29 # 5、配置网络结构 30 # 数据层 31 # 特征数据层 32 # name 数据层名称 33 # shape 数据形状 34 # dtype 数据类型 35 # append_batch_size= True,传递的数据是一个批次样本 36 # append_batch_size= False,传递的数据是一个样本 37 x = fluid.layers.data(name="x", shape=[1, 28, 28], append_batch_size=True, dtype='float32') 38 # print(x.shape) 39 # 目标数据层 40 y = fluid.layers.data(name="y", shape=[1], append_batch_size=True, dtype="int64") 41 # print(y.shape) 42 # 网络层 43 # 以fc为演示 44 # input 输入 45 # size 该层的神经元个数 46 # act 激活函数 47 h1 = fluid.layers.fc(input=x, size=128, act="relu", name="h1") 48 h2 = fluid.layers.fc(input=h1, size=64, act="relu", name="h2") 49 # 结束--多分类 50 # 3分类 51 # 多分类的最后一层 吐出预测值 52 y_pedict = fluid.layers.fc(input=h2, size=3, act="softmax", name="out_put") 53 54 # 损失 --交叉熵损失 55 # input 预测值 56 # label 真实值 57 # 总损失 58 loss = fluid.layers.cross_entropy(input=y_pedict, label=y) 59 # print(loss) 60 # 计算平均损失 61 avg_loss = fluid.layers.mean(loss) 62 63 # 计算准确率----这一批次的准确率 64 acc = fluid.layers.accuracy(input=y_pedict, label=y) 65 66 # 优化损失---sgd 67 # (1)构建sgd优化算法 68 sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1) 69 # (2)指定优化损失 70 sgd_optimizer.minimize(avg_loss) 71 72 # 6、指定数据层与网络的联系 73 feeder = fluid.DataFeeder(feed_list=[x, y], place=place) 74 75 # 7、构建执行器 76 exe = fluid.Executor(place=place) 77 78 # 8、初始化训练参数 79 # 显示的初始化网络参数 80 exe.run(fluid.default_startup_program()) 81 82 # 9、开启训练 83 # 双层循环--去训练数据 84 # 外层---训练的轮数 85 # 内层---加载数据进行训练