我尝试在Keras(tf.keras)中构建一个堆栈式自动编码器。通过堆叠我的意思并不是很深。我为Keras找到的所有示例都在生成例如3个编码器层,3个解码器层,它们对其进行训练,并称之为一天。但是,本文介绍的一种训练堆叠式自动编码器(SAE)的正确方法似乎是:堆叠式降噪自动编码器:使用局部降噪标准在深度网络中学习有用的表示形式
简而言之,应该对SAE进行分层训练,如下图所示。训练完第1层后,将其用作训练第2层的输入。应将重建损失与第1层而不是输入层进行比较。
这就是我的麻烦开始的地方。如何告诉Keras在哪些层上使用损失函数?
这是我的工作。由于Keras中已不存在自动编码器模块,因此我构建了第一个自动编码器,并将其编码器的权重(trainable = False)设置在第二个自动编码器的第一层(总共2层)中。然后,当我训练它时,它显然将重建的图层out_s2与输入图层in_s而不是图层1进行比较hid1。
# autoencoder layer 1
in_s = tf.keras.Input(shape=(input_size,))
noise = tf.keras.layers.Dropout(0.1)(in_s)
hid = tf.keras.layers.Dense(nodes[0], activation='relu')(noise)
out_s = tf.keras.layers.Dense(input_size, activation='sigmoid')(hid)
ae_1 = tf.keras.Model(in_s, out_s, name="ae_1")
ae_1.compile(optimizer='nadam', loss='binary_crossentropy', metrics=['acc'])
# autoencoder layer 2
hid1 = tf.keras.layers.Dense(nodes[0], activation='relu')(in_s)
noise = tf.keras.layers.Dropout(0.1)(hid1)
hid2 = tf.keras.layers.Dense(nodes[1], activation='relu')(noise)
out_s2 = tf.keras.layers.Dense(nodes[0], activation='sigmoid')(hid2)
ae_2 = tf.keras.Model(in_s, out_s2, name="ae_2")
ae_2.layers[0].set_weights(ae_1.layers[0].get_weights())
ae_2.layers[0].trainable = False
ae_2.compile(optimizer='nadam', …Run Code Online (Sandbox Code Playgroud) 您能否简单解释一下利用神经网络的深度学习和传统机器学习之间的区别?要使神经网络"深入"需要多少级别?这只是营销炒作吗?
artificial-intelligence machine-learning neural-network deep-learning