TensorFlow强化学习softmax层

时间:2020-07-12 23:03:58

标签: python tensorflow neural-network reinforcement-learning softmax

我的TensorFlow代码有问题。这是我在以前的环境中使用过的一段代码-磁极问题

initializer = tf.contrib.layers.variance_scaling_initializer()

X = tf.placeholder(tf.float32, shape=[None, n_inputs])

hidden = tf.layers.dense(X, n_hidden, activation=tf.nn.elu, kernel_initializer=initializer)
logits = tf.layers.dense(hidden, n_outputs)
outputs = tf.nn.sigmoid(logits)  

p_left_and_right = tf.concat(axis=1, values=[outputs, 1 - outputs])
action = tf.multinomial(tf.log(p_left_and_right), num_samples=1)

y = 1. - tf.to_float(action)

cross_entropy = tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=logits)
optimizer = tf.train.AdamOptimizer(learning_rate)
grads_and_vars = optimizer.compute_gradients(cross_entropy)

有两个可能的离散决策(左右移动)。

我由乙状结肠层决定,后来根据该层给出的概率随机选择。

现在我的环境具有三个离散的可能决定,因此我尝试使用softmax层,但它不起作用。当我启动TensorFlow会话时。 代码是这样的:

initializer = tf.contrib.layers.variance_scaling_initializer()

X = tf.placeholder(tf.float32, shape=[None, n_inputs])

hidden = tf.layers.dense(X, n_hidden, activation=tf.nn.elu, kernel_initializer=initializer)

logits = tf.layers.dense(hidden, n_outputs)

outputs = tf.nn.softmax(logits)  

p_left_and_right = tf.concat(axis=3, values=[outputs])
action = tf.multinomial(tf.log(p_left_and_right), num_samples=1)

y = 1. - tf.to_float(action)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y, logits=logits)
optimizer = tf.train.AdamOptimizer(learning_rate)
grads_and_vars = optimizer.compute_gradients(cross_entropy)

我应该如何对其进行更改或改进,以获得合适的结果并更正/改善TensorFlow的代码

2 个答案:

答案 0 :(得分:0)

我还没有尝试自己执行此操作,但我的猜测是放弃为将伯努利案例映射到更一般的分类案例而引入的黑客手段。

更具体地说,我会尝试这样做:

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/path")

target_link_libraries(projectName clientA)
target_link_libraries(projectName clientB)

(我假设您使用这些毕业证书来构建适当的反馈信号,其中还涉及一些回报/优势)

答案 1 :(得分:0)

最简单的解决方案是更改交叉熵函数。我将其更改为sparse_softmax_cross_entropy_with_logits,该标签不需要一种热编码格式的标签。

initializer = tf.contrib.layers.variance_scaling_initializer()

X = tf.placeholder(tf.float32, shape=[None, n_inputs])

hidden = tf.layers.dense(X, n_hidden, activation=tf.nn.elu, kernel_initializer=initializer)

logits = tf.layers.dense(hidden, n_outputs)

action = tf.multinomial(logits, num_samples=1)


cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels= action[0], logits=logits)