【问题标题】:Autoencoders with variable input size具有可变输入大小的自动编码器
【发布时间】:2021-04-18 10:06:51
【问题描述】:

我正在尝试为 0.05 秒到 30 秒之间可变长度的声音开发自动编码器。我想知道是否有可能创建一个简单的自动编码器,将这个可变长度作为输入考虑在内,或者我应该在之前进行一些输入预处理。

有什么想法吗?

【问题讨论】:

标签: python keras autoencoder


【解决方案1】:

您可以将 Conv1D 或 LSTM 层用于可变长度的时间序列数据。您必须使用全局池化来在图层后面实现固定的暗淡。

import tensorflow as tf
from tensorflow.keras.layers import Input, Conv1D, GlobalAveragePooling1D, Dense
from tensorflow.keras.models import Model
ip = Input((None, 1))
conv1 = Conv1D(32, 3) (ip)
maxp = GlobalAveragePooling1D() (conv1)
final = Dense(10) (maxp)
model = Model(ip, final)
model.summary()
Model: "model_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_5 (InputLayer)         [(None, None, 1)]         0         
_________________________________________________________________
conv1d_3 (Conv1D)            (None, None, 32)          128       
_________________________________________________________________
global_average_pooling1d (Gl (None, 32)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                330       
=================================================================
Total params: 458
Trainable params: 458
Non-trainable params: 0
  • 您必须使用批量大小 = 1 进行训练,或者编写一个批量生成器来生成具有相同长度信号的批量。

【讨论】:

  • 我实际上不知道如何使用 LSTM,我尝试将 (None,None) 作为输入形状,但它不起作用...
【解决方案2】:

我无法通过评论其他答案来回答,但对于 LSTM,输入大小只是您在一个给定时间步长的输入大小。我猜当您说您有“可变输入大小”时,它仅在时间维度上是可变的。但是除了时间维度之外,您的输入维度应该是固定的,这就是您的 LSTM 想要知道的输入维度。例如,当你处理声音时,如果这是你的输入,它可能只是你的 FFT 的长度,或者另一个例子,如果你正在处理 midi 钢琴卷,你可以预处理你的数据,以便你的每一列输入张量是一个时间步长,每一行都是您钢琴的 88 个可能键之一...您的输入大小为 88,您将输入一个大小为 (num_of_time_step, 88) 的张量

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 2022-01-11
    • 1970-01-01
    • 2020-01-29
    • 2013-12-21
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多