def get_trainer(self): # 获取分类器 out = convolutional_neural_network() # 定义标签 label = paddle.layer.data(name="label", type=paddle.data_type.integer_value(10)) # 获取损失函数 cost = paddle.layer.classification_cost(input=out, label=label) # 获取参数 parameters = paddle.parameters.create(layers=cost) """ 定义优化方法 learning_rate 迭代的速度 momentum 跟前面动量优化的比例 regularzation 正则化,防止过拟合 :leng re """ optimizer = paddle.optimizer.Momentum(learning_rate=0.1 / 128.0, momentum=0.9, regularization=paddle.optimizer.L2Regularization(rate=0.0005 * 128)) ''' 创建训练器 cost 分类器 parameters 训练参数,可以通过创建,也可以使用之前训练好的参数 update_equation 优化方法 ''' trainer = paddle.trainer.SGD(cost=cost, parameters=parameters, update_equation=optimizer) return trainer
def worker(): # 初始化PaddlePaddle paddle.init(use_gpu=False, trainer_count=2) # 加载模型参数和预测的拓扑生成一个预测器 with open('../models/param.tar', 'r') as param_f: params = paddle.parameters.Parameters.from_tar(param_f) # 获取分类器 out = convolutional_neural_network() while True: # 获取数据和子队列 data, recv_queue = sendQ.get() try: # 获取预测结果 result = paddle.infer(output_layer=out, parameters=params, input=data) # 处理预测结果 lab = np.argsort(-result) print lab # 返回概率最大的值和其对应的概率值 result = '{"result":%d,"possibility":%f}' % (lab[0][0], result[0][ (lab[0][0])]) print result recv_queue.put((True, result)) except: # 通过子队列发送异常信息 trace = traceback.format_exc() print trace recv_queue.put((False, trace)) continue
im = im.resize((28, 28), Image.ANTIALIAS) im = np.array(im).astype(np.float32).flatten() im = im / 255.0 return im test_data = [] test_data.append((load_images(path), )) return test_data # *****************使用训练好的参数进行预测******************************** def to_prediction(self, out, parameters, test_data): # 开始预测 probs = paddle.infer(output_layer=out, parameters=parameters, input=test_data) # 处理预测结果并打印 lab = np.argsort(-probs) print "预测结果为: %d" % lab[0][0] if __name__ == "__main__": testMNIST = TestMNIST() # 开始预测 out = convolutional_neural_network() parameters = testMNIST.get_parameters() test_data = testMNIST.get_TestData('../images/infer_3.png') testMNIST.to_prediction(out=out, parameters=parameters, test_data=test_data)