【发布时间】: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}}]] 无法从低维拾取到高维。
开放式问题:
- 自动编码器是否可以使用 Dropout
- 如果顺序是问题,我可以尝试哪些可能的层
【问题讨论】:
-
添加 dropout 层作为第一层没有意义。 Dropout 层用于停用前一层激活的激活。
-
@Mitiku 在去噪自动编码器的上下文中确实有意义,其中“破坏”输入的一种方法是随机丢弃它们。
标签: python tensorflow keras neural-network deep-learning