如何使用 LSTM 自动编码器在多特征序列中正确忽略解码时填充或丢失的时间步

2023-12-04

我正在尝试通过使用自动编码器进行重建来学习文本序列的潜在表示(多个特征(3))。由于某些序列比最大 pad 长度或我正在考虑的时间步长 (seq_length=15) 短,我不确定重建是否会学会忽略时间步长或不计算损失或准确性。

我遵循了来自的建议这个答案来裁剪输出,但我的损失是 nan 以及一些精度。

input1 = keras.Input(shape=(seq_length,),name='input_1')
input2 = keras.Input(shape=(seq_length,),name='input_2')
input3 = keras.Input(shape=(seq_length,),name='input_3')
input1_emb = layers.Embedding(70,32,input_length=seq_length,mask_zero=True)(input1)
input2_emb = layers.Embedding(462,192,input_length=seq_length,mask_zero=True)(input2)
input3_emb = layers.Embedding(84,36,input_length=seq_length,mask_zero=True)(input3)
merged = layers.Concatenate()([input1_emb, input2_emb,input3_emb])
activ_func = 'tanh'
encoded = layers.LSTM(120,activation=activ_func,input_shape=(seq_length,),return_sequences=True)(merged) #
encoded = layers.LSTM(60,activation=activ_func,return_sequences=True)(encoded)
encoded = layers.LSTM(15,activation=activ_func)(encoded)

# Decoder reconstruct inputs
decoded1 = layers.RepeatVector(seq_length)(encoded)
decoded1 = layers.LSTM(60, activation= activ_func , return_sequences=True)(decoded1)
decoded1 = layers.LSTM(120, activation= activ_func , return_sequences=True,name='decoder1_last')(decoded1)

解码器一的输出形状为(None, 15, 120)。

input_copy_1 = layers.TimeDistributed(layers.Dense(70, activation='softmax'))(decoded1)
input_copy_2 = layers.TimeDistributed(layers.Dense(462, activation='softmax'))(decoded1)
input_copy_3 = layers.TimeDistributed(layers.Dense(84, activation='softmax'))(decoded1)

对于每个输出,我尝试按照建议裁剪 O 填充时间步长这个答案. padding has 0实际输入丢失(由于填充为零)并且1否则

@tf.function
def cropOutputs(x):
    #x[0] is softmax of respective feature (time distributed) on top of decoder
    #x[1] is the actual input feature
    padding =  tf.cast( tf.not_equal(x[1][1],0), dtype=tf.keras.backend.floatx())
    print(padding)
    return x[0]*tf.tile(tf.expand_dims(padding, axis=-1),tf.constant([1,x[0].shape[2]], tf.int32))

将裁剪函数应用于所有三个输出。

input_copy_1 = layers.Lambda(cropOutputs, name='input_copy_1', output_shape=(None, 15, 70))([input_copy_1,input1])
input_copy_2 = layers.Lambda(cropOutputs, name='input_copy_2', output_shape=(None, 15, 462))([input_copy_2,input2])
input_copy_3 = layers.Lambda(cropOutputs, name='input_copy_3', output_shape=(None, 15, 84))([input_copy_3,input3])

我的逻辑是裁剪每个特征的时间步长(序列的所有 3 个特征具有相同的长度,这意味着它们一起错过了时间步长)。但对于时间步长,它们已根据其特征大小(70,462,84)应用了 softmax,因此我必须通过在 mask 的帮助下制作一个由 0 或 1 组成的多维掩码数组等于此特征大小,将时间步长归零padding,并使用多维掩码数组乘以相应的 softmax 表示。

我不确定我这样做是否正确Nan这些输入的损失以及其他准确性是我正在与此任务一起学习的(它仅发生在裁剪过程中)。


如果它对某人有帮助,我最终会直接从损失中裁剪填充的条目(从这些答案).

@tf.function
def masked_cc_loss(y_true, y_pred):

        mask = tf.keras.backend.all(tf.equal(y_true, masked_val_hotencoded), axis=-1)
        mask = 1 - tf.cast(mask, tf.keras.backend.floatx())    
 
        loss = tf.keras.losses.CategoricalCrossentropy()(y_true, y_pred) * mask 
        
        return tf.keras.backend.sum(loss) / tf.keras.backend.sum(mask) #  averaging by the number of unmasked entries
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 LSTM 自动编码器在多特征序列中正确忽略解码时填充或丢失的时间步 的相关文章

  • 张量流 - 向量中的前 k 个值到二进制向量

    假设我有一个带有值的向量 0 4 1 2 8 7 0 2 如何获得前 k 个值的二进制向量 k 3 0 1 0 0 1 1 0 0 in 张量流 TensorFlow 的tf math top k https www tensorflow
  • 如何通过不规则索引获取子张量?

    我想通过不规则索引获得子张量 这是我的问题 Input tensor 2x8x10x1 Batch x Height x Width x Channel index Height 0 1 4 5 index Width 0 1 4 5 8
  • Tensorflow 数据集的数据预处理是针对整个数据集还是针对每次调用 iterator.next() 进行一次?

    您好 我现在正在研究tensorflow中的数据集API 我有一个关于执行数据预处理的dataset map 函数的问题 file name image1 jpg image2 jpg im dataset tf data Dataset
  • Tensorflow - 获取队列中的样本数量?

    对于性能监控 我想关注当前排队的示例 我正在平衡用于填充队列的线程数量和队列的最佳最大大小 我如何获得这些信息 我正在使用一个tf train batch 但我猜这些信息可能在下面的某个地方FIFOQueue 我本以为这是一个局部变量 但我
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • Scipy 稀疏 CSR 矩阵到 TensorFlow SparseTensor - 小批量梯度下降

    我有一个 Scipy 稀疏 CSR 矩阵 它是根据 SVM Light 格式的稀疏 TF IDF 特征矩阵创建的 特征数量巨大且稀疏 所以我必须使用 SparseTensor 否则速度太慢 例如 特征数量为 5 示例文件如下所示 0 4 1
  • Keras 可以处理不同尺寸的输入图像吗?

    Keras 可以处理不同尺寸的输入图像吗 例如 在全卷积神经网络中 输入图像可以具有任意大小 然而 我们在用Keras创建网络时需要指定输入形状 因此 我们如何使用 Keras 来处理不同的输入尺寸而不将输入图像调整为相同的尺寸 谢谢你的帮
  • 张量流中检查点之间的间隔

    如何指定张量流中两个连续检查点之间的间隔 里面没有选项tf train Saver来指定这一点 每次 我使用不同数量的全局步骤运行模型时 我都会得到检查点之间的新间隔 The tf train Saver https www tensorf
  • 如何将体积补丁存储到 HDF5 中?

    我有一个尺寸的体积数据256x128x256 由于内存有限 我无法将整个数据直接输入到 CAFFE 因此 我会随机选择n sample补丁50x50x50从体积数据中提取并将其存储到 HDF5 中 我成功地从原始数据及其标签中随机提取了补丁
  • TensorFlow:Dst 张量未初始化

    The MNIST For ML Beginners当我运行时教程给我一个错误print sess run accuracy feed dict x mnist test images y mnist test labels 其他一切都运行
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • Keras IndexError:索引超出范围

    我是 Keras 新手 我尝试在数据集上执行二进制 MLP 并且不断使索引超出范围 但不知道为什么 from keras models import Sequential from keras layers core import Dens
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • 如何使用文本和?

    我一直在关注this https github com tensorflow models tree master textsum使用 textsum 的链接 我已经使用提供的命令训练了模型 但我在 textsum log root 目录中
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • Colab 上没有名为“tensorflow.compat.v2”的模块

    我正在关注这个https thebinarynotes com how to train mask r cnn on the custom dataset https thebinarynotes com how to train mask
  • 在张量流中对不平衡数据集进行二次采样

    张量流初学者在这里 这是我的第一个项目 我正在使用预定义的估算器 我有一个极其不平衡的数据集 其中积极结果大约占总数据的 0 1 我怀疑这种不平衡会极大地影响我的模型的性能 作为解决这个问题的第一次尝试 由于我有大量数据 我想扔掉大部分底片
  • 复制张量流图

    复制 TensorFlow 图并保持更新的最佳方法是什么 理想情况下 我想将重复的图放在另一个设备上 例如从 GPU 到 CPU 然后不时更新副本 简短回答 你可能想要检查点文件 https www tensorflow org progr
  • 了解 TensorFlow 检查点加载?

    TF 检查点包含什么 例如 估算器存储一个单独的文件 其中包含GraphDef原型 你基本上可以做一个tf import graph def 然后创建一个tf train Saver 并将检查点恢复到图中 现在如果你还有另一个GraphDe
  • 收到的标签值 1 超出了 [0, 1) 的有效范围 - Python、Keras

    我正在使用具有张量流背景的 keras 开发一个简单的 cnn 分类器 def cnnKeras training data training labels test data test labels n dim print Initiat

随机推荐