我试图从稠密层重建一幅图像,这是1)卷积网络输出与图像输入的级联;2)稠密层具有数值输入。
级联的一维张量被馈送到一个密集的层,我需要重建成一幅图像。
我现在使用的代码是这样的:
merge_output = tf.keras.layers.concatenate([convolutional_model_output, numerical_model_output])
densem1 = Dense(8092, activation='relu')(merge_output)
#densem2 = Dense(512, activation='relu')(densem1)
densem2 = Dense(self.image_width*self.image_height*3, activation='relu')(densem1)
reshapem1 = Reshape(target_shape=(self.image_height, self.image_width, 3))(densem2)
convm1 = Conv2D(filters=32, kernel_size=3, padding="same" , activation='relu')(reshapem1)
convm2 = Conv2D(filters=3, kernel_size=3, padding="same" , activation='relu')(convm1)然而,训练不能收敛到真正的输出,看上去就像奇怪颜色的万花筒。

我的方法有什么问题吗?我确实意识到,将卷积和数值特征连在一起,并将它们重新塑造成图像可能是一个可能的痛点,是否有更好的方法来表示这一层或特定的问题?
提前谢谢。
发布于 2020-02-29 21:34:39
控制这两个输出层并不像您想象的那样痛苦。首先,有许多事情可能会导致模型出错。让我们一个接一个地看看:
1)如果损失曲线不稳定或不被覆盖,可在中间稠密层中使用批数范数。因为有很多密集的层,它可能导致过度拟合以及所以尝试使用辍学。实验批次规范和辍学,以及一起看看哪一个有帮助。
2)检查解码器网络的输入和输出范围:将数据标准化为0和1,只需将RGB值乘以255。如果输出图像与输入图像相同,则使用此规范化值作为真正的目标值,或者使用规范化目标图像作为目标输出。类似地,要获得0到1之间的输出值,只需将输出从relu剪辑到1,并将其存储在浮点变量中作为其分数。使用这个浮动变量来计算损失。将它与255相乘,并将其存储在整数变量中以便于可视化。
如果这些方法不起作用,您可能想看看其他的重采样方法,例如:反褶积层和PixelShu显层。您可能还会看到生成模型的解码器,比如GANs,特别是CGAN (条件GAN),它可以将图像中的信息与已知的先验信息进行类似的合并。
https://datascience.stackexchange.com/questions/68899
复制相似问题