如何在Keras中实现矢量数据的一维卷积自动编码器?

如何在Keras中实现矢量数据的一维卷积自动编码器?,keras,convolution,autoencoder,Keras,Convolution,Autoencoder,自动编码器的输入向量大小为128。我总共有730个样品(730x128)。我正在尝试使用1D CNN自动编码器。我想稍后使用隐藏层作为我新的低维表示。 我的代码现在运行,但我的解码输出甚至不接近原始输入。 代码如下: input\u sig=input(批处理形状=(无,128,1)) x=Conv1D(64,3,activation='relu',padding='valid')(输入信号) x1=MaxPoolg1d(2)(x) x2=Conv1D(32,3,激活='relu',填充='va

自动编码器的输入向量大小为128。我总共有730个样品(730x128)。我正在尝试使用1D CNN自动编码器。我想稍后使用隐藏层作为我新的低维表示。 我的代码现在运行,但我的解码输出甚至不接近原始输入。 代码如下:

input\u sig=input(批处理形状=(无,128,1))
x=Conv1D(64,3,activation='relu',padding='valid')(输入信号)
x1=MaxPoolg1d(2)(x)
x2=Conv1D(32,3,激活='relu',填充='valid')(x1)
x3=最大池1d(2)(x2)
展平=展平()(x3)
编码=密集(32,激活='relu')(平坦)
打印(“编码{}的形状”。格式(K.int_形状(平面)))
x2=Conv1D(32,3,激活='relu',填充='valid')(x3)
x1_u1;=上采样1d(2)(x2_1;)
x=Conv1D(64,3,激活='relu',填充='valid')(x1)
upsamp=UpSampling1D(2)(x)
展平=展平()
解码=密集(128,激活='relu')(平坦)
解码=重塑((128,1))(解码)
打印(“解码{}的形状”。格式(K.int_形状(x1_)))
自动编码器=型号(输入信号,解码)
编译(优化器='adam',loss='mse',metrics=['accurity'])
然后,自动编码器的输入为-->(730128,1) 但是当我将原始信号与解码信号进行对比时,它们是非常不同的!!
谢谢你在这方面的帮助

您需要一个带有“sigmoid”激活的单通道卷积层来重建解码图像。 看看下面的例子。您可以使用loss='mse'和optimizer='adam'编译它

input_sig = Input(batch_shape=(1,128,1))
x = Conv1D(8,3, activation='relu', padding='same',dilation_rate=2)(input_sig)
x1 = MaxPooling1D(2)(x)
x2 = Conv1D(4,3, activation='relu', padding='same',dilation_rate=2)(x1)
x3 = MaxPooling1D(2)(x2)
x4 = AveragePooling1D()(x3)
flat = Flatten()(x4)
encoded = Dense(2)(flat)
d1 = Dense(64)(encoded)
d2 = Reshape((16,4))(d1)
d3 = Conv1D(4,1,strides=1, activation='relu', padding='same')(d2)
d4 = UpSampling1D(2)(d3)
d5 = Conv1D(8,1,strides=1, activation='relu', padding='same')(d4)
d6 = UpSampling1D(2)(d5)
d7 = UpSampling1D(2)(d6)
decoded = Conv1D(1,1,strides=1, activation='sigmoid', padding='same')(d7)
model= Model(input_sig, decoded)

培训数据集和验证数据集的损失都减少了吗?@hikaru,是的,略有减少。我是否对解码器有正确的直觉(反褶积和上采样)?您随后在模型中在哪里使用
编码的
?难道这不应该连接到解码器吗?这个问题解决了吗?我想做一些类似的事情,除了我的一维向量是3000长。。。。