我构建了一个自定义的Open AI Gym环境,其中有13种不同的动作和33种观察项目。在情节中,可以使用所有操作,但只能使用一次,否则情节结束。因此,一集的最大长度为13。
我为此尝试训练了几个神经网络,但是到目前为止,NN并没有很好地学习它,它在第13步之前就结束了。 NN的最后一层是一个具有13个神经元的softmax层。
您是否知道NN的外观,可以学会从13个动作中选择一项?
亲切的问候, 费伦茨
答案 0 :(得分:0)
我在这个话题中发现了一些有趣的东西 https://ai.stackexchange.com/questions/7755/how-to-implement-a-constrained-action-space-in-reinforcement-learning
将检查“什么都不做”的想法是否有帮助...
答案 1 :(得分:0)
最后,我编写了这段代码:
from keras import backend as K
import tensorflow as tf
def mask_output2(x):
inp, soft_out = x
# add a very small value in order to avoid having 0 everywhere
c = K.constant(0.0000001, dtype='float32', shape=(32, 13))
y = soft_out + c
y = Lambda(lambda x: K.switch(K.equal(x[0],0), x[1], K.zeros_like(x[1])))([inp, soft_out])
y_sum = K.sum(y, axis=-1)
y_sum_corrected = Lambda(lambda x: K.switch(K.equal(x[0],0), K.ones_like(x[0]), x[0] ))([y_sum])
y_sum_corrected = tf.divide(1,y_sum_corrected)
y = tf.einsum('ij,i->ij', y, y_sum_corrected)
return y
它只是纠正了乙状结肠结果,以清除(设置为0)将输入张量设置为1(显示已使用的动作)的神经元。