如何将时间分布的密集层应用于形状为(batch_size, 600, 105, 8)的张量,以生成输出(batch_size, 600, 48)

我有一个Conv2D层生成形状为(batch_size, 600, 105, 8)的张量。这是一批歌曲频谱图,特征图大小为8。现在我想对每个时间帧(600)应用大小为48的”Dense”层,以生成形状为(batch_size, 600, 48)的张量。默认的Keras Dense层似乎无法满足要求…

有什么建议吗?

这是我的函数

def build_cnn(input_shape=(None, None, 1),          feature_map_size=8,          num_layers=5,          kernerl_size=(5, 5),          dropout=0.2,          pool_size=(2, 2),          epochs=100,          lr=0.001,          momentum=0.9,          verbose=False):    model = Sequential()    # 添加卷积层    for _ in range(num_layers):             # 卷积层        model.add(Conv2D(            feature_map_size,            kernerl_size,            input_shape=input_shape,            padding='same',            activation='elu')        )        # Dropout层        # model.add(Dropout(dropout))    # 密集层    model.add(TimeDistributed(Dense(48, activation='elu')))

回答:

最基本且不敏感的处理方法是重塑数据:

#卷积之后:model.add(Reshape((600,105*8)))model.add(Dense(48,...))

但这可能不是最佳选择。不幸的是,我对这些频谱图的理解不够,所以建议其他方法。但这种方法基本上是将所有频谱和特征混合在一个密集层中,它们将被混合在一起。


如果使用-1重塑失败

有一种可能是在lambda层内使用后端函数处理未知形状。但这仅在tensorflow作为后端时有效。Theano不喜欢这个想法。我因为这个放弃了Theano。

#仅在tensorflow中有效import keras.backend as Kdef reshape(x):    shp = K.shape(x)    shp = K.concatenate([shp[:2],shp[2:3]*shp[3:]])    return K.reshape(x,shp)model.add(Lambda(reshape))

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注