#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. Большое вам спасибо за этот ответ. Это действительно помогает.