【问题标题】:How to create autoencoder using dropout in Dense layers using Keras如何使用 Keras 在密集层中使用 dropout 创建自动编码器
【发布时间】:2019-03-19 03:15:45
【问题描述】:

概念:

我正在尝试重建数字数据集的输出,为此我在自动编码器上尝试了不同的方法。其中一种方法是在 Dense 层中使用 dropout。

问题:

如使用编码器和解码器的 2 个部分所示,尺寸在中心减小。这就是问题开始的地方,因为具有 Dropout 的 Dense Layers 无法拾取。

请注意,这是我尝试自动编码器的第二种方式,我已经完成了,如图所示 here

这是我(天真地)写的:

from keras import models
from keras import layers
from keras import backend as K

network = models.Sequential()
input_shape = x_train_clean.shape[1]   # input_shape = 3714

outer_layer = int(input_shape / 7)
inner_layer = int(input_shape / 14)

network.add(Dropout(0.2, input_shape=(input_shape,)))

network.add(Dense(units=outer_layer, activation='relu'))

network.add(Dropout(0.2))

network.add(Dense(units=inner_layer, activation='relu'))

network.add(Dropout(0.2))

network.add(Dense(units=10, activation='linear'))

network.add(Dropout(0.2))

network.add(Dense(units=inner_layer, activation='relu'))

network.add(Dropout(0.2))

network.add(Dense(units=outer_layer, activation='relu'))

network.add(Dropout(0.2))

network.compile(loss=lambda true, pred: K.sqrt(K.mean(K.square(pred-true))),  # RMSE
                  optimizer='rmsprop',  # Root Mean Square Propagation
                  metrics=['accuracy'])  # Accuracy performance metric

history = network.fit(x_train_noisy,  # Features
                        x_train_clean,  # Target vector
                        epochs=3,  # Number of epochs
                        verbose=0,  # No output
                        batch_size=100,  # Number of observations per batch
                        shuffle=True,)   # training data will be randomly shuffled at each epoch

输出:

输出错误说得很清楚:

tensorflow.python.framework.errors_impl.InvalidArgumentError:不兼容的形状:[100,530] 与 [100,3714] [[{{node loss_1/dropout_9_loss/sub}}]] 无法从低维拾取到高维。

开放式问题:

  1. 自动编码器是否可以使用 Dropout
  2. 如果顺序是问题,我可以尝试哪些可能的层

【问题讨论】:

  • 添加 dropout 层作为第一层没有意义。 Dropout 层用于停用前一层激活的激活。
  • @Mitiku 在去噪自动编码器的上下文中确实有意义,其中“破坏”输入的一种方法是随机丢弃它们。

标签: python tensorflow keras neural-network deep-learning


【解决方案1】:

您看到的错误与网络的学习能力无关。 network.summary() 显示输出形状为 (None, 530) 而输入形状为 (None, 3714) 导致训练时出错。

在训练期间导致错误的输入:

x_train_noisy = np.zeros([100, 3714]) #just to test
x_train_clean = np.ones([100, 3714])
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [100,530] vs. [100,3714]

训练没有错误的输入:

x_train_noisy = np.zeros([100, 3714]) #just to test
x_train_clean = np.ones([100, 530])

100/100 [==============================] - 1s 11ms/step - loss: 1.0000 - acc: 1.0000

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2019-06-16
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多