Lesson3-基于神经网络方法求解RL
3.1 背景知识——值函数近似&神经网络
RL➡Deep RL: 从少量状态到数不清的状态
3.1.1 值函数近似(Q函数近似)
3.1.2 神经网络——黑盒不黑
神经网络可逼近任意连续函数
案例分析:求解四元一次方程
代码如下
# 运行线性回归模型————快速求解4元一次方程
# 加载库
import paddle.fluid as fluid
import numpy as np
# 生成数据
np.random.seed(0)
outputs = np.random.randint(5, size=(10, 4))
res = []
for i in range(10):
# 假设方程式为 y=4a+6b+7c+2d
y = 4 * outputs[i][0] + 6 * outputs[i][1] + 7 * outputs[i][2] + 2 * outputs[i][3]
res.append([y])
# 定义数据
train_data = np.array(outputs).astype('float32')
y_true = np.array(res).astype('float32')
# 定义网络
x = fluid.layers.data(name="x", shape=[4], dtype='float32')
y = fluid.layers.data(name="y", shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
# 定义损失函数
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(cost)
# 定义优化方法
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.05)
sgd_optimizer.minimize(avg_cost)
# 参数初始化
cpu = fluid.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())
##开始训练,迭代500次
for i in range(500):
outs = exe.run(
feed={
'x': train_data, 'y': y_true},
fetch_list=[y_predict.name, avg_cost.name])
if i % 50 == 0:
print('iter={:.0f},cost={}'.format(i, outs[1][0]))
# 存储训练结果
params_dirname = "result"
fluid.io