Есть ли способ преобразовать это для обучения сверточного автоэнкодера? - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблема при попытке создания сверточного автоэнкодера.

________________________________________________________________
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 [(None, 8192, 64)] в ту же форму, что и input_56 [(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)

1 Ответ

0 голосов
/ 29 апреля 2019

Входные данные для слоя UpSampling1D имеют форму (batch, steps, features), а выходные данные имеют форму (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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...