ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

paddle与强化学习笔记

2022-02-28 18:34:16  阅读:342  来源: 互联网

标签:fluid 笔记 batch cost paddle test 强化 data


paddle与强化学习笔记


最近打算学习强化学习,看到了百度的公开课(https://aistudio.baidu.com/aistudio/education/group/info/1335),所以跟着学习记录一些笔记。

1.预习

1.人的视觉系统处理信息是分级的。
2.边缘特征 —–> 基本形状和目标的局部特征——>整个目标 这个过程其实和我们的常识是相吻合的,因为复杂的图形,往往就是由一些基本结构组合而成的。同时我们还可以看出:大脑是一个深度架构,认知过程也是深度的。
3.低层次特征 - - - - (组合) - - ->抽象的高层特征

1.1MNIST手写识别

1.基于anconda安装parl环境

conda create -n paddle python=3.7#创建3.7虚拟环境
conda info -e #查看自己创建的化境是否成功
conda activate paddle #进入此环境
pip install paddlepaddle #安装百度的paddle库
pip install parl #安装算法parl库
pip install gym #安装游戏环境库

2.搭建神经网络识别手写数字
首先搭建网络训练数据,后保存模型

#1.导包
from xml.sax.handler import property_declaration_handler
import numpy as np
import paddle as paddle
paddle.enable_static()#paddle2.0以上需要加这一行代码
import paddle.fluid as fluid
from PIL import Image
import matplotlib.pyplot as plt 
import os
#2.下载手写数据集
train_data=paddle.batch(paddle.reader.shuffle(paddle.dataset.mnist.train(),buf_size=512),batch_size=128)#下载训练集数据并打乱,缓冲512,batch128
test_data=paddle.batch(paddle.dataset.mnist.test(),batch_size=128)#下载测试集,batch128
"""
#观察一张手写的数据格式
temp_data=paddle.batch(paddle.dataset.mnist.train(),batch_size=1)
print(next(temp_data()))
"""
#3.搭建神经网络结构
##3.1网络结构
image=fluid.layers.data(name="image",shape=[1,28,28],dtype="float32")#定义输入层的数据格式
label=fluid.layers.data(name="label",shape=[1],dtype="int64")
def multilayer_perceptron(input):#定义多层感知机的结构(两个100和一个10)
    hidden1=fluid.layers.fc(input=input,size=100,act="relu")#第一个隐层是:100个神经元的全连接层和relu激活层
    hidden2=fluid.layers.fc(input=hidden1,size=100,act="relu")#第二个隐藏层:100个神经元的全连接层和relu激活层
    prediction=fluid.layers.fc(input=hidden2,size=10,act="softmax")#第三层:10个神经元的全连接和softmax激活层
    return prediction
model=multilayer_perceptron(image)
##3.2网络的损失函数和准确率函数
cost=fluid.layers.cross_entropy(input=model,label=label)#交叉熵损失函数
avg_cost=fluid.layers.mean(cost)
acc=fluid.layers.accuracy(input=model,label=label)
##3.3网络训练的优化方式
optimizer=fluid.optimizer.AdamOptimizer(learning_rate=0.001)#学习率位0.001的Adam优化器
opts=optimizer.minimize(avg_cost)#优化器优化均熵值
#4.模型训练与评估
##4.1定义解析器(cpu、gpu)并初始化参数
place=fluid.CPUPlace()
exe=fluid.Executor(place)#实例化了一个cpu解析器
exe.run(fluid.default_startup_program())#初始化解析器参数
feeder=fluid.DataFeeder(place=place,feed_list=[image,label])#定义输入数据的维度【图片,标签】
##4.2开始训练与测试
for epoch in range(5):
    for batch_id,data in enumerate(train_data()):#每次拿一个batch的训练数据
        train_cost,train_acc=exe.run(program=fluid.default_main_program(),feed=feeder.feed(data),fetch_list=[avg_cost,acc])#训练一个batch后拿到avg_cost和acc
        if batch_id%100==0:
            print("epoch:%d,batch:%d,cost:%0.5f,accuracy:%0.5f"%(epoch,batch_id,train_cost[0],train_acc[0]))
    test_costs=[]#测试,每一个epoch测试一次网络
    test_accs=[]
    for batch_id,data in enumerate(test_data()):
        test_cost,test_acc=exe.run(program=fluid.default_main_program(),feed=feeder.feed(data),fetch_list=[avg_cost,acc])
        test_costs.append(test_cost[0])
        test_accs.append(test_acc[0])
    test_cost=(sum(test_costs)/len(test_costs))#求一个epoch里面测试集的所有batch的均值
    test_acc=(sum(test_accs)/len(test_accs))
    print("test:%d,cost:%0.5f,accuracy:%0.5f"%(epoch,test_cost,test_acc))
    model_save_dir="C:\\Users\\Administrator\\Desktop\\parl\\out"#保存模型
    if not os.path.exists(model_save_dir):
        os.makedirs(model_save_dir)
    print("save models to %s"%(model_save_dir))
    fluid.io.save_inference_model(model_save_dir,#保存推理model的路径
                                        ['image'],#模型feed的数据
                                        [model],#模型的ariables
                                        exe)#保存inference mode

3.然后用此模型进行手写数据图片的预测

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import paddle as paddle
paddle.enable_static()#paddle2.0以上需要加这一行代码
import paddle.fluid as fluid
#1.首先对拿到的图片进行预处理,转化为网络数据的数据格式
def load_image(file):
    im=Image.open(file).convert("L")#将RGB转化为灰度图像,L代表灰度图像,灰度图像的像素值在0~255之间
    im=im.resize((28,28),Image.ANTIALIAS)#resize image with high-quality 图像大小为28*28
    im=np.array(im).reshape(1,1,28,28).astype(np.float32)#返回新形状的数组,把它变成一个 numpy 数组以匹配数据馈送格式。
    im=im/255.0*2.0-1.0#归一化到【-1~1】之间
    print(im)
    return im
img=Image.open("C:\\Users\\Administrator\\Desktop\\parl\\data\\6.png")
plt.imshow(img)#根据数组绘制图像
plt.show()#显示图像
#2.加载模型进行预测
place=fluid.CPUPlace()
exe=fluid.Executor(place)#实例化了一个cpu解析器
scope=fluid.core.Scope()#实例化
img=load_image("C:\\Users\\Administrator\\Desktop\\parl\\data\\6.png")
with fluid.scope_guard(scope):
    #推理Program,targetname是一个str列表,它包含需要在推理 Program 中提供数据的变量的名称。fetch_targets:是一个 Variable 列表,从中我们可以得到推断结果。model_save_dir:模型保存的路径 
    [inference_program,feed_target_names,fetch_targets]=fluid.io.load_inference_model("C:\\Users\\Administrator\\Desktop\\parl\\out",exe)
    results = exe.run(program=inference_program,     #运行推测程序
                feed={feed_target_names[0]: img}, #喂入要预测的img
                fetch_list=fetch_targets)         #得到推测结果,  
lab = np.argsort(results)                               #argsort函数返回的是result数组值从小到大的索引值
print("该图片的预测结果的label为: %d" % lab[0][0][-1])  #-1代表读取数组中倒数第一列  

请添加图片描述

2.初识

3.基于表格型求解RL

4.基于神经网络求解RL

5.基于策略梯度求解RL

6.连续动作空间上求解RL

标签:fluid,笔记,batch,cost,paddle,test,强化,data
来源: https://blog.csdn.net/weixin_38226321/article/details/123177386

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有