Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tensorflow.js符号传感器不被接受为输入_Javascript_Node.js_Tensorflow_Tensorflow.js - Fatal编程技术网

Javascript Tensorflow.js符号传感器不被接受为输入

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继承来的,但事实似乎并

我试图在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向量的形状作为值提供给它。如果答案解决了您的问题,请不要忘记将其标记为已接受:)