python - 有没有办法将其转换为训练卷积自动编码器?
问题描述
尝试创建卷积自动编码器时遇到此问题。
________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_56 (InputLayer) (None, 8192, 4) 0
_________________________________________________________________
conv1d_147 (Conv1D) (None, 8192, 64) 8256
_________________________________________________________________
leaky_re_lu_138 (LeakyReLU) (None, 8192, 64) 0
_________________________________________________________________
max_pooling1d_82 (MaxPooling (None, 256, 64) 0
_________________________________________________________________
conv1d_148 (Conv1D) (None, 256, 32) 32800
_________________________________________________________________
leaky_re_lu_139 (LeakyReLU) (None, 256, 32) 0
_________________________________________________________________
max_pooling1d_83 (MaxPooling (None, 16, 32) 0
_________________________________________________________________
conv1d_149 (Conv1D) (None, 16, 32) 16416
_________________________________________________________________
leaky_re_lu_140 (LeakyReLU) (None, 16, 32) 0
_________________________________________________________________
up_sampling1d_48 (UpSampling (None, 256, 32) 0
_________________________________________________________________
conv1d_150 (Conv1D) (None, 256, 64) 65600
_________________________________________________________________
leaky_re_lu_141 (LeakyReLU) (None, 256, 64) 0
_________________________________________________________________
up_sampling1d_49 (UpSampling (None, 8192, 64) 0
=================================================================
Total params: 123,072
Trainable params: 123,072
Non-trainable params: 0
_________________________________________________________________
我需要将 up_sampling1d_49 转换为与 input_56[(None, 8192, 64)]
相同的形状[(None, 8192, 4)]
来训练自动编码器。有没有办法做到这一点?
我尝试将 Flatten 层与 MLP 层一起使用。
import keras as K
import scipy as sp
##Creating the model
fil,col=8192,4
entrada = K.layers.Input(shape=(fil,col) )
c1 = K.layers.Conv1D(filters=64,kernel_size= 32, padding='same')(entrada)
lr1 = K.layers.LeakyReLU(alpha=0.35)(c1)
p1 = K.layers.MaxPool1D(pool_size=32)(lr1)
c2 = K.layers.Conv1D(filters=32,kernel_size=16, padding='same')(p1)
lr2 = K.layers.LeakyReLU(alpha=0.25)(c2)
p2 = K.layers.MaxPool1D(pool_size=16)(lr2)
c3 = K.layers.Conv1D(filters=32,kernel_size=16, padding='same')(p2)
lr3 = K.layers.LeakyReLU(alpha=0.25)(c3)
p3 = K.layers.UpSampling1D(size=16)(lr3)
c4 = K.layers.Conv1D(filters=64,kernel_size=32, padding='same')(p3)
lr3 = K.layers.LeakyReLU(alpha=0.35)(c4)
p4 = K.layers.UpSampling1D(size=32)(lr3)
model = K.models.Model(entrada,p4)
解决方案
UpSampling1D 层的输入具有 shape (batch, steps, features)
,输出具有 shape (batch, upsampled_steps, features)
。因此,UpSampling1D 层不会改变通道维度。因此,您的选择是将过滤器数量转换为conv1d_150
.
c4 = K.layers.Conv1D(filters=64,kernel_size=32, padding='same')(p3)
lr3 = K.layers.LeakyReLU(alpha=0.35)(c4)
p4 = K.layers.UpSampling1D(size=32)(lr3)
这会将 和 的输出形状 更改为conv1d_150
和。leaky_re_lu_141
(None, 256, 4)
up_sampling1d_49
(None, 8192, 4)
推荐阅读
- templates - 使用模板重载转换运算符
- perl - 如何在 Perl 中检查回文?
- sql - SQL Server:group by 以检索 0 的行
- linux - 找到新安装的应用程序“Beyond Compare”的可执行文件
- vue-component - Rails 5.1 API CORS 问题
- python - 数据框中的唯一值计数
- javascript - 反应本地存储
- json - 在 Spark 中展开 JSON 数组
- php - 总结具有多个索引的mysql json对象
- amazon-web-services - 使用 Elastic Beanstalk 应用程序启用 HTTPS 和 HTTP