У меня есть данные формы (93,32), и я хочу сжать их с помощью автоматического кодера с плотным слоем узкого места. Я как-то пытаюсь встроить пространственную информацию только в одно измерение. Я могу разработать простой полностью подключенный автоэнкодер, но когда он включает слои Conv2D, я немного запутываюсь в его части. Ниже приведен мой код, и потери не уменьшаются после 50 эпох, а реконструкция даже близко не к входу. Было бы очень хорошо, если бы вы могли указать на проблему в моей архитектуре. Я использую Лакирелу, потому что мои данные имеют отрицательные значения ..
model = Sequential()
model.add(Conv2D(filters=30,kernel_size= (93,3),strides=(1, 1),input_shape=(93,32,1),kernel_initializer='VarianceScaling')) # VarianceScaling
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.7))
model.add(MaxPooling2D(pool_size=(1,4), strides=(1,3), padding='valid')) #padding='valid'
model.add(Flatten())
model.add(Dense(150,kernel_initializer='VarianceScaling'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.7))
model.add(Dense(40,kernel_initializer='VarianceScaling'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.7))
model.add(Dense(150,kernel_initializer='VarianceScaling'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.7))
model.add(Dense(270,kernel_initializer='VarianceScaling'))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.7))
model.add(Reshape((1,9,30)))
model.add(UpSampling2D((93,4)))
model.add(Conv2D(filters=1,kernel_size= (1,1),strides=(1, 1),kernel_initializer='VarianceScaling'))
model.add(LeakyReLU(alpha=0.7))
model.add(Cropping2D(cropping=((0,0),(0,4))))
Я использую простые «среднеквадратичные ошибки» в качестве функции потерь. Проблема где-то в части декодера. Спасибо за ваше время:)