Javascript Tensorflow.js符号传感器不被接受为输入
我试图在Tensorflow.js中重现A2C算法,我想我已经成功地重现了演员和评论家的模型 但是,为了将当前状态作为输入提供给模型,我使用了一种单热编码,在此之前,我使用tf.input()函数设置输入,该函数返回一个SymbolicTensor(对我来说,其作用与Python API中的tf.placeholder相同) oneHot函数只接受tf.Tensor对象作为第一个参数,我在文档中看不到解决方法。我本以为tf.SymbolicTensor是从tf.Tensor继承来的,但事实似乎并非如此Javascript Tensorflow.js符号传感器不被接受为输入,javascript,node.js,tensorflow,tensorflow.js,Javascript,Node.js,Tensorflow,Tensorflow.js,我试图在Tensorflow.js中重现A2C算法,我想我已经成功地重现了演员和评论家的模型 但是,为了将当前状态作为输入提供给模型,我使用了一种单热编码,在此之前,我使用tf.input()函数设置输入,该函数返回一个SymbolicTensor(对我来说,其作用与Python API中的tf.placeholder相同) 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'
有没有关于如何解决此问题的想法?这里有几个问题: 采用多个参数,但所需的两个
索引
和深度
分别为tensor1d
和编号
类型。
要创建密集层,不必传入onehot编码张量,尤其是在使用序列模型时。您可能必须为模型提供onehot张量,但只有在训练期间使用特征和标签数据拟合模型时,才会出现这种情况
tf.js
没有类似占位符的tensorflow方法,它在会话中执行之前先构建一个图。您可以参考这篇文章,它突出了这两种实现之间的差异
另外,请注意,
inputDim
应该是一个数字,而不是一个张量谢谢你的回答,我可以早些检查,我注意到我做事情有点太快了。我做了必要的更改以使用oneHot编码,但有一个问题仍然存在:我应该使用什么输入维度?oneHot矩阵的形状?@tarzan212要给出的尺寸是输入数据的尺寸。如果模型的输入是onehot向量,则使用属性inputShape
而不是inputDim
,并将onehot向量的形状作为值提供给它。如果答案解决了您的问题,请不要忘记将其标记为已接受:)