gpt4 book ai didi

javascript - Tensorflow.js SymbolicTensor 不被接受为输入

转载 作者:行者123 更新时间:2023-11-30 19:51:19 60 4
gpt4 key购买 nike

我正在尝试在 Tensorflow.js 中重现 A2C 算法,我想我已经成功地重现了 Actor 和评论家的模型。

但是,我使用单一热编码来提供我的当前状态作为我模型的输入,在此之前,我使用 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'

关于如何解决这个问题有什么想法吗?

最佳答案

这里有几个问题:

tf.oneHot需要几个参数,但 2 个必需的 indicesdepth 分别是 tensor1dnumber 类型。要创建密集层,您不必传入 onehot 编码张量,尤其是在使用顺序模型时。您可能必须为模型提供一个单热张量,但只有当您在训练期间使用特征和标签数据拟合模型时才会发生这种情况。

tf.js 没有类似占位符的 tensorflow 方法,该方法先构建一个图,然后再在 session 中执行它。你可以引用这个answer这突出了两种实现之间的差异

另外,请注意 inputDim 应该是一个数字而不是张量

关于javascript - Tensorflow.js SymbolicTensor 不被接受为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54428707/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com