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 # 内层---加载数据进行训练