当前位置: 首页 > news >正文

网站模板源码平台济南网站开发wuliankj

网站模板源码平台,济南网站开发wuliankj,网站建设投标文件,建网站和建小程序多少钱## 强化学习 Actor-critic # 和PG比起来主要的变化#xff1a; # 评估点由状态价值变成了TD_error,网络形式变了 # learn函数长得不一样 # action有一个优化函数#xff0c;优化的是价值函数#xff0c;希望最大化期望的reward#xff0c;Critic网络也有一个reward#xf…## 强化学习 Actor-critic # 和PG比起来主要的变化 # 评估点由状态价值变成了TD_error,网络形式变了 # learn函数长得不一样 # action有一个优化函数优化的是价值函数希望最大化期望的rewardCritic网络也有一个reward希望最小化现实和估计的误差即td——error) # Actor使用我们上一节讲到的策略函数负责生成动作(Action)并和环境交互。而Critic使用我们之前讲到了的价值函数负责评估Actor的表现并指导Actor下一阶段的动作import gym # import tensorflow as tf import tensorflow.compat.v1 as tf tf.compat.v1.disable_eager_execution() import numpy as np import random from collections import deque# Hyper Parameters GAMMA 0.95 # discount factor 衰减因子 LEARNING_RATE 0.01 # 探索率class Actor():def __init__(self, env, sess): # 初始化# init some parametersself.time_step 0 # 某个地方需要用的步数self.state_dim env.observation_space.shape[0] # 状态维度self.action_dim env.action_space.n # 动作维度self.create_softmax_network() # 创建softmax网络# Init session 初始化tensorflow参数self.session tf.InteractiveSession()self.session.run(tf.global_variables_initializer()) # 初始化 tensorflow 参数。def create_softmax_network(self): # 创建softmax网络# network weightsW1 self.weight_variable([self.state_dim, 20]) # w1 权重4*20的网络b1 self.bias_variable([20]) # b1权重y w1*x b1W2 self.weight_variable([20, self.action_dim])b2 self.bias_variable([self.action_dim])# input layerself.state_input tf.placeholder(float, [None, self.state_dim]) # 状态输入层占位多少组不知道每组有4个状态self.tf_acts tf.placeholder(tf.int32, [None, 2], nameactions_num) # 给他的值对应于依据概率选择出来的动作self.td_error tf.placeholder(tf.float32, None, td_error) # TD_error PG中基于状态价值这里评估点发生了一点变化# hidden layersh_layer tf.nn.relu(tf.matmul(self.state_input, W1) b1) # 进行 y w1*x b1 的运算 并激活成可输出的状态# softmax layer# matmul返回两个数组的矩阵乘积结果还是一个矩阵self.softmax_input tf.matmul(h_layer, W2) b2 # #进行 y w2*x b2 的运算输出是两个是数不确定TODO# softmax outputself.all_act_prob tf.nn.softmax(self.softmax_input, nameact_prob) # softmax输出层输出每个动作的概率# 计算logits 和 labels 之间的softmax 交叉熵# 函数先对 logits 进行 softmax 处理得到归一化的概率将lables向量进行one-hot处理然后求logits和labels的交叉熵self.neg_log_prob tf.nn.softmax_cross_entropy_with_logits(logitsself.softmax_input,labelsself.tf_acts)# TODO softmax_cross_entropy_with_logits 和 sparse_softmax_cross_entropy_with_logits 的区别是啥# 这句是在算损失函数了定义为softmax交叉熵损失函数和TD_error的乘积self.exp tf.reduce_mean(self.neg_log_prob * self.td_error) # 策略梯度函数# 创建优化器 这里需要最大化当前策略的价值因此需要最大化self.exp,即最小化-self.exp# 由于tensorflow要minimize误差 但是我们希望这个概率变大所以要加个负号# 利用tensorflow中的Adam优化算法最小化loss函数# Adam优化算法是一个寻找全局最优点的优化算法引入了二次方梯度校正。self.train_op tf.train.AdamOptimizer(LEARNING_RATE).minimize(-self.exp)def weight_variable(self, shape):initial tf.truncated_normal(shape)return tf.Variable(initial)def bias_variable(self, shape):initial tf.constant(0.01, shapeshape)return tf.Variable(initial)def choose_action(self, observation): # 依据概率选择动作选择动作 这里的observation其实就是状态当前的状态先传入state_input(也就相当于softmax网络的入口)softmax网络的输出是针对当前状态每个动作的概率第一句就是运行了一个会话进行这个过程。#TODO prob_weights 应该是一个动作对应概率的矩阵,怎么查看数据类型来着忘了下一句就是依据概率选择动作了选择概率最大的动作# np.newaxis功能增加一个维度具体见印象笔记prob_weights self.session.run(self.all_act_prob, feed_dict{self.state_input: observation[np.newaxis, :]})# 这个range表示这个action的大小后面的p表示概率分布 .ravel的意思是将数组维度拉成一维数组也就是将矩阵向量化,见印象笔记action np.random.choice(range(prob_weights.shape[1]), pprob_weights.ravel())return actiondef learn(self, state, action, td_error):s,a 用于产生梯度上升法的方向这时候的action是上面这个函数依据概率选择出来的动作td 来自Critic用于告诉Actor这个方向对不对s state[np.newaxis, :] # 把state变成(4,1)的形状one_hot_action np.zeros(self.action_dim) # 初始化one_hot 形式的actionone_hot_action[action] 1 # action是数字几就把第几个位置上的数变成1a one_hot_action[np.newaxis, :] # 然后再把它变成横向向量的形式# train on episodeself.session.run(self.train_op, feed_dict{self.state_input: s,self.tf_acts: a, # 把动作传给了tf_actsself.td_error: td_error,})# critic网络中会用到的一些超级参数 EPSILON 0.01 # final value of epsilon epsilon 的最小值当 epsilon 小于该值时将不再随机选择行为。 REPLAY_SIZE 10000 # experience replay buffer size 经验回放缓冲区大小 BATCH_SIZE 32 # size of minibatch REPLACE_TARGET_FREQ 10 # frequency to update target Q networkclass Critic():def __init__(self, env, sess):# init some parametersself.time_step 0self.epsilon EPISODEself.state_dim env.observation_space.shape[0] # 状态维度self.action_dim env.action_space.n # 动作维度 TODO .n是什么意思self.create_Q_network() # 创建Q网络self.create_training_method() # 创建训练方法# Init session 初始化会话self.session sessself.session.run(tf.global_variables_initializer())def create_Q_network(self): # critic网络使用类似于DQN的三层神经网络但是只有一维输出值# network weightsW1q self.weight_variable([self.state_dim, 20])b1q self.bias_variable([20])W2q self.weight_variable([20, 1])b2q self.bias_variable([1])self.state_input tf.placeholder(tf.float32, [1, self.state_dim], state) # 应该是指只输入了一组# hidden layersh_layerq tf.nn.relu(tf.matmul(self.state_input, W1q) b1q) # #进行 y w1*x b1 的运算 从线性状态激活成非线性状态# Q Value layerself.Q_value tf.matmul(h_layerq, W2q) b2q # 进行 y w2*x b2 的运算输出是两个是数不确定TODOdef create_training_method(self): # 创建训练方法self.next_value tf.placeholder(tf.float32, [1, 1], v_next)self.reward tf.placeholder(tf.float32, None, reward)# https://blog.csdn.net/tian_jiangnan/article/details/105047745# tf.variable_scope是一个变量管理器下面的东东即使变量名一样作用域不一样引用的时候就不会出现穿插问题了with tf.variable_scope(squared_TD_error): # 在作用域名为squared_TD_error的作用域里面self.td_error self.reward GAMMA * self.next_value - self.Q_value # 计算TD_errorself.loss tf.square(self.td_error) # tf.square是对td_error里面每一个元素求平方with tf.variable_scope(train): # 在作用域名为train的作用域里面# 利用tensorflow中的Adam优化算法最小化loss函数# Adam优化算法是一个寻找全局最优点的优化算法引入了二次方梯度校正。self.train_op tf.train.AdamOptimizer(self.epsilon).minimize(self.loss)def train_Q_network(self, state, reward, next_state): # 训练Q网络s, s_ state[np.newaxis, :], next_state[np.newaxis, :] # 当前状态和下一个状态# 由输入状态和Q_value计算状态价值函数v_ self.session.run(self.Q_value, {self.state_input: s_})# 运行会话输出td_errortd_error, _ self.session.run([self.td_error, self.train_op],{self.state_input: s, self.next_value: v_, self.reward: reward}) # 得到td误差return td_errordef weight_variable(self, shape): # 权重变量initial tf.truncated_normal(shape) # 从一个正态分布片段中输出平均数值 shape决定输出张量的形状return tf.Variable(initial) # 更新参数变量存在内存中def bias_variable(self, shape): # 偏执变量initial tf.constant(0.01, shapeshape) # 生成常量矩阵return tf.Variable(initial)# Hyper Parameters ENV_NAME CartPole-v0 EPISODE 3000 # Episode limitation STEP 3000 # Step limitation in an episode TEST 10 # The number of experiment test every 100 episode 每训练100幕数据就做一次效果测试测试10次取平均def main():# initialize OpenAI Gym env and dqn agentsess tf.InteractiveSession() # 开启会话env gym.make(ENV_NAME) # 导入环境actor Actor(env, sess) # 定义AC网络critic Critic(env, sess)for episode in range(EPISODE):# initialize task# a) 初始化S为当前状态序列的第一个状态, 拿到其特征向量ϕ(S)state env.reset() # 初始化第一个状态# Trainfor step in range(STEP): # 这部分actor网络和critic网络进行交互# b) 在Actor网络中使用ϕ(S)作为输入输出动作A,基于动作A得到新的状态S′,反馈R。action actor.choose_action(state) # e-greedy action for train 输入状态得到动作A# c) 在Critic网络中分别使用ϕ(S)ϕ(S‘′)作为输入得到Q值输出V(S)V(S′)next_state, reward, done, _ env.step(action) # 基于动作A得到新的状态next_state,回报reward# 由train_Q_network计算得到TD误差td_error critic.train_Q_network(state, reward, next_state) # gradient grad[r gamma * V(s_) - V(s)]# 更新Actor网络参数θactor.learn(state, action, td_error) # true_gradient grad[logPi(s,a) * td_error] 最大化价值函数state next_state # 为下一步做准备下一个状态即为下一步的当前状态if done: # 达到终止条件就退出循环break# Test every 100 episodesif episode % 100 0:total_reward 0 # 初始化总回报for i in range(TEST):state env.reset() # 初始化环境for j in range(STEP):env.render() # env.render()函数用于渲染出当前的智能体以及环境的状态action actor.choose_action(state) # # 根据状态选择动作state, reward, done, _ env.step(action) # 根据action执行step得到三状态total_reward reward # 为了十次取一次平均先加后除if done: # 如果达到了终止条件则退出breakave_reward total_reward / TEST # 求平均print(episode: , episode, Evaluation Average Reward:, ave_reward)if __name__ __main__:main()
http://www.pierceye.com/news/910860/

相关文章:

  • 四川省凉亭建设工程有限公司网站的博客wordpress
  • 搭建一个网站需要多少钱?如何做网站二级域名
  • 广德县住房和城乡建设网站wordpress网站维护教程
  • 在网站上显示地图金湖县网站建设
  • 网站域名区别吗模板和网站是一体的吗
  • 百度网盟推广怎么选择投放网站抖音seo代理
  • 电商wordpress网站优化百度
  • phpcms v9 网站搬家南通网站设计专家
  • 延安网站建设推广黄骅市网站建设价格
  • 做网站怎么选关键词网站管理强化阵地建设
  • 网站制作是那个cms 导航网站
  • 网站标题优化技巧房产信息网上自助查询系统
  • wordpress电影网教程合肥网站快速排名优化
  • 药房网站模板网站中英文要怎么做
  • 做影视网站用什么网盘最好wordpress投资主题
  • 潍坊市建设工程质量安全监督站网站网站建设的毕业设计
  • 建筑网站夜里几点维护怎么开发软件app软件
  • 厦门人才网官方网站wordpress 晒单
  • 网站不收录是什么原因网站建设与网页设计试卷
  • html网站模板资源2015做那个网站能致富
  • 设计导航精选最好的设计网站大全商城网站建设开发多少钱
  • 滨州j建设局网站投诉电话检察机关加强网站建设
  • 付费抽奖网站怎么做宁波网站推广营销
  • 单位的网站的建设个人网页制作策划书
  • 在中国可以做国外的域名网站吗企业网查询是什么
  • 网站开发在线浏览pdfwin7可以做网站吗
  • 手机上制作网站的软件巢湖有没有专门做网站的公司
  • 哪里有做企业网站的wordpress 主题类型
  • 什么是网站平台开发工具网站怎么做筛选功能的代码
  • 自建站 外贸军事内参消息