我正在尝试在Tensorflow.js中重现A2C算法,我想我已经成功地为演员和评论家重现了模型。
但是,我正在使用一种热编码,以便将当前状态作为模型的输入提供,在此之前,我正在使用tf.input()函数设置输入,该函数返回SymbolicTensor (对我而言,其行为与Python API中的tf.placeholder相同)。
tf.oneHot函数仅接受tf.Tensor对象作为第一个参数,我在文档中看不到任何解决方法。我本以为tf.SymbolicTensor是从tf.Tensor继承的,但事实并非如此。
class A2CAgent {
constructor(state_size, action_size) {
this.render = false;
this.state_size = state_size;
this.action_size = action_size;
this.value_size = 1;
this.discount_factor = 0.99;
this.actor_learningr = 0.001;
this.critic_learningr = 0.005;
this.actor = this.build_actor();
#this.critic = this.build_critic();
}
build_actor() {
const model = tf.sequential();
this.state = tf.input({name:"state", dtype:'int32', shape:[]});
let one_hot = tf.oneHot(this.state, this.state_size); //Pb ne prend pas de placeholder
model.add(tf.layers.dense({
units: 24,
activation: 'relu',
kernelInitializer:'glorotUniform',
inputDim:tf.expandDims(one_hot, 0),
}));
model.add(tf.layers.dense({
units: this.action_size,
activation:'softmax',
kernelInitializer:'glorotUniform',
}));
model.summary();
model.compile({
optimizer: tf.train.adam(this.actor_learningr),
loss:tf.losses.softmaxCrossEntropy
});
return model;
}
}
我希望这段代码能很好地执行,但我得到了这个错误:
Error: Argument 'indices' passed to 'oneHot' must be a Tensor or TensorLike, but got 'SymbolicTensor'
关于如何解决此问题的任何想法?