【发布时间】:2019-03-29 13:24:55
【问题描述】:
我正在训练一个代理在离散环境中行动,我正在使用tf.distributions.Categorical 输出层,然后我对其进行采样以创建一个 softmax 输出以确定要采取的行动。我这样创建我的策略网络:
pi_eval, _ = self._build_anet(self.state, 'pi', reuse=True)
def _build_anet(self, state_in, name, reuse=False):
w_reg = tf.contrib.layers.l2_regularizer(L2_REG)
with tf.variable_scope(name, reuse=reuse):
layer_1 = tf.layers.dense(state_in, HIDDEN_LAYER_NEURONS, tf.nn.relu, kernel_regularizer=w_reg, name="pi_l1")
layer_2 = tf.layers.dense(layer_1, HIDDEN_LAYER_NEURONS, tf.nn.relu, kernel_regularizer=w_reg, name="pi_l2")
a_logits = tf.layers.dense(layer_2, self.a_dim, kernel_regularizer=w_reg, name="pi_logits")
dist = tf.distributions.Categorical(logits=a_logits)
params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=name)
return dist, params
然后,我使用tf.distributions.Categorical webpage 中的示例对网络进行采样并构建一个类分布输出以充当softmax 输出:
n = 1e4
self.logits_action = tf.cast(tf.histogram_fixed_width(values=pi_eval.sample(int(n)), value_range=[0, 1], nbins=self.a_dim), dtype=tf.float32) / n
像这样运行:
softmax = self.sess.run([self.logits_action], {self.state: state[np.newaxis, :]})
但输出只有两个非零条目:
[0.44329998 0. 0. 0.5567 ]
[0.92139995 0. 0. 0.0786 ]
[0.95699996 0. 0. 0.043 ]
[0.7051 0. 0. 0.2949]
我的预感与value_range 有关,documentation 说:
value_range:形状 2 与值具有相同 dtype 的张量。值 = value_range1 将映射到 hist[-1]。
但我不确定我应该使用什么值范围?不知道有没有人有什么想法?
【问题讨论】:
标签: python tensorflow machine-learning neural-network softmax