Сглаживание и изменение формы ввода в кодировщик

#python #tensorflow #machine-learning #keras #deep-learning

#питон #тензорный поток #машинное обучение #keras #глубокое обучение

Вопрос:

У меня есть набор данных, содержащий сегменты 3D фиксированной длины в форме (1,200,4) , которые я хотел бы передать в Antoencoder с полностью подключенными слоями, аналогично:

  encoder
autoencoder.add(Dense(200, input_shape=(self.input_dim,), activation='relu'))  
autoencoder.add(Dense(100, input_shape=(self.input_dim,), activation='relu'))  
autoencoder.add(Dense(80, input_shape=(self.input_dim,), activation='linear'))  
autoencoder.add(Dense(encoding_dim, input_shape=(self.input_dim,), activation='linear')) 
        
#decoder
autoencoder.add(Dense(80, activation='linear')) 
autoencoder.add(Dense(100, activation='relu')) 
autoencoder.add(Dense(200, activation='relu'))  
autoencoder.add(Dense(self.input_dim, activation='linear'))
  

Я знаю, что этот ввод необходимо сгладить перед подачей в эту сеть, я должен был бы добавить Flatten() слой непосредственно перед первым Dense() кодировщиком.

В чем я не уверен, так это в способе восстановить входные данные обратно в их собственную форму (1,200,4) в части декодера.

Если это имеет значение, входные данные состоят из numpy-ndarray сегментов фиксированной длины, таких, что:

 print(train_x.shape)
(140508, 1, 200, 4)
  

Например, допустим, что ввод такой:

 X = np.random.randn(3400, 1, 200, 4)


X.shape
(3400, 1, 200, 4)
  

I как мне применить выравнивающий слой к этому входному сигналу в кодере, а затем восстановить его в декодере для полностью подключенного автоэнкодера, аналогичного описанному выше.

Есть предложения по этому поводу?

Ответ №1:

вот такая возможность… в конце вам нужно просто позаботиться о размерности и выполнить правильную перестройку

 encoding_dim = 20
input_shape = (1,200,4)
n_sample = 100

X = np.random.uniform(0,1, (n_sample,)   input_shape)

autoencoder = Sequential()

autoencoder.add(Flatten(input_shape=input_shape))
autoencoder.add(Dense(200, activation='relu'))  
autoencoder.add(Dense(100, activation='relu'))  
autoencoder.add(Dense(80, activation='relu'))  
autoencoder.add(Dense(encoding_dim, activation='relu')) 
        
#decoder
autoencoder.add(Dense(80, activation='relu')) 
autoencoder.add(Dense(100, activation='relu')) 
autoencoder.add(Dense(200, activation='relu'))  
autoencoder.add(Dense(np.prod(input_shape), activation='linear'))
autoencoder.add(Reshape(input_shape))

print(autoencoder.summary())
autoencoder.compile('adam', 'mse')
autoencoder.fit(X,X, epochs=3)
  

Комментарии:

1. Большое вам спасибо за этот ответ. Это действительно помогает.