【发布时间】:2021-04-18 10:06:51
【问题描述】:
我正在尝试为 0.05 秒到 30 秒之间可变长度的声音开发自动编码器。我想知道是否有可能创建一个简单的自动编码器,将这个可变长度作为输入考虑在内,或者我应该在之前进行一些输入预处理。
有什么想法吗?
【问题讨论】:
标签: python keras autoencoder
我正在尝试为 0.05 秒到 30 秒之间可变长度的声音开发自动编码器。我想知道是否有可能创建一个简单的自动编码器,将这个可变长度作为输入考虑在内,或者我应该在之前进行一些输入预处理。
有什么想法吗?
【问题讨论】:
标签: python keras autoencoder
您可以将 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
【讨论】:
我无法通过评论其他答案来回答,但对于 LSTM,输入大小只是您在一个给定时间步长的输入大小。我猜当您说您有“可变输入大小”时,它仅在时间维度上是可变的。但是除了时间维度之外,您的输入维度应该是固定的,这就是您的 LSTM 想要知道的输入维度。例如,当你处理声音时,如果这是你的输入,它可能只是你的 FFT 的长度,或者另一个例子,如果你正在处理 midi 钢琴卷,你可以预处理你的数据,以便你的每一列输入张量是一个时间步长,每一行都是您钢琴的 88 个可能键之一...您的输入大小为 88,您将输入一个大小为 (num_of_time_step, 88) 的张量
【讨论】: