我正在尝试使用Keras Layer API在tensorflow中训练自动编码器。这个API非常好用,很容易用来设置深度学习层。
快速回顾一下自动编码器(在我看来)是一个函数$f( x ) = z$和它的伪逆\hat{x} = f^{-1}(z)使得f(f^{-1}(x)) \近似x。在神经网络模型中,您将建立一个具有瓶颈层的神经网络,它试图使用f^{-1}(f(x))预测自己的x。当训练误差最小化时,你就有了两个组件,z= f(x)是直到并包括瓶颈层的预测。f^{-1}(z)是到最后的瓶颈层。
所以我设置了编码器:
SZ = 6
model = tf.keras.Sequential()
model.add(layers.InputLayer(SZ))
model.add(layers.Dense(SZ))
model.add(layers.Dense(1))
model.add(layers.Dense(SZ))
model.summary()
model.compile('sgd','mse',metrics = ['accuracy'])
history= model.fit(returns.values,returns.values,epochs=100)我在这里的困难是训练权重和分量(f是input+dense(SZ)+dense(1),f^{-1}是dense(1)+dense(SZ)),但我不知道如何将它们解开。有没有办法打破神经网络中的两层,并将它们作为各自独立的模型来对待?
发布于 2020-03-31 05:42:38
import tensorflow as tf
SZ=6
encoder_input = tf.keras.layers.Input(shape=(SZ,))
x = tf.keras.layers.Dense(SZ)(encoder_input)
x = tf.keras.layers.Dense(1)(x)
encoder_model = tf.keras.Model(inputs=encoder_input, outputs=x, name='encoder')
decoder_input = tf.keras.layers.Input(shape=(1,))
x2 = tf.keras.layers.Dense(SZ)(decoder_input)
decoder_model = tf.keras.Model(inputs=decoder_input, outputs=x2, name='decoder')
encoder_output = encoder_model(encoder_input)
decoder_output = decoder_model(encoder_output)
encoder_decoder_model = tf.keras.Model(inputs=encoder_input , outputs=decoder_output, name='encoder-decoder')
encoder_decoder_model.summary()以下是摘要:
Model: "encoder-decoder"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_8 (InputLayer) [(None, 6)] 0
_________________________________________________________________
encoder (Model) (None, 1) 49
_________________________________________________________________
decoder (Model) (None, 6) 12
=================================================================
Total params: 61
Trainable params: 61
Non-trainable params: 0你可以训练编码器-解码器模型,你分离的encoder_model和decoder_model将被自动训练。您还可以从encoder_decoder模型中检索它们,如下所示:
retrieved_encoder = encoder_decoder_model.get_layer('encoder')
retrieved_encoder.summary()它打印:
Model: "encoder"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_8 (InputLayer) [(None, 6)] 0
_________________________________________________________________
dense_11 (Dense) (None, 6) 42
_________________________________________________________________
dense_12 (Dense) (None, 1) 7
=================================================================
Total params: 49
Trainable params: 49
Non-trainable params: 0和解码器:
retrieved_decoder = encoder_decoder_model.get_layer('decoder')
retrieved_decoder.summary()打印的内容:
Model: "decoder"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_9 (InputLayer) [(None, 1)] 0
_________________________________________________________________
dense_13 (Dense) (None, 6) 12
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0https://stackoverflow.com/questions/60919644
复制相似问题