对编码器的输入进行展平和整形

2024-10-02 18:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,其中包含形状为(1,200,4)的3D固定长度段,我想将其输入到具有完全连接层的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'))

我知道这个输入在输入这个网络之前需要平坦化,我希望在编码器的第一个Dense()之前添加一个Flatten()

我不确定的是,有一种方法可以在解码器部分将输入重构回它自己的形状(1,200,4)

如果重要的话,输入由一个固定长度段的数组组成,这样:

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

例如,假设输入为:

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


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

我如何在编码器处对该输入应用展平层,然后在解码器处为完全连接的自动编码器重建该层,类似于上面所述

有什么建议吗


Tags: 数据selfaddinput编码器解码器activationdense
1条回答
网友
1楼 · 发布于 2024-10-02 18:28:05

这里有一个可能性。。。你只需要在最后注意尺寸,并进行适当的整形

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)

相关问题 更多 >