首页 > 解决方案 > 使用 tf.scatter_nd 使 Keras 'None' 批量大小不变

问题描述

我需要向 LSTM 解码器输入一个池化模块,并且我正在使用一个自定义层来构建它,其中编码器 LSTM 状态和 Keras 输入层作为输入。在这个自定义层中,我需要将更新分散到索引:

updates: <tf.Tensor --- shape=(None, 225, 5, 32) dtype=float32>
indices: <tf.Tensor --- shape=(None, 225) dtype=int32>

创建tf.scatter_nd一个 shape=(None, 960, 5, 32) 的张量,如下所示:

tf.scatter_nd(tf.expand_dims(indices, 2), updates, shape=[None, 960, 5, 32])

但问题是这样做会由于 NoneType 的形状而产生错误,我不想在其中声明batch_size它,因为它是 Keras 层并且仅在学习过程中是确定的。在这种状态下,代码的工作版本是这样的:

tf.scatter_nd(tf.expand_dims(indices, 2), updates, shape=[960, 5, 32])
        >>> <tf.Tensor 'ScatterNd_4:0' shape=(960, 5, 32) dtype=float32>

忽略了输出中的 batch_size。是否有任何替代方法来构造所需的输出张量,而不是tf.scatter_nd或有一种方法可以使其正常工作?

标签: pythontensorflowkerasdeep-learning

解决方案


推荐阅读