首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TensorFlow/Keras中将神经网络的SubGraph视为模型

在TensorFlow/Keras中将神经网络的SubGraph视为模型
EN

Stack Overflow用户
提问于 2020-03-30 03:27:24
回答 1查看 299关注 0票数 0

我正在尝试使用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)是到最后的瓶颈层。

所以我设置了编码器:

代码语言:javascript
复制
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)),但我不知道如何将它们解开。有没有办法打破神经网络中的两层,并将它们作为各自独立的模型来对待?

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 05:42:38

代码语言:javascript
复制
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()

以下是摘要:

代码语言:javascript
复制
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_modeldecoder_model将被自动训练。您还可以从encoder_decoder模型中检索它们,如下所示:

代码语言:javascript
复制
retrieved_encoder = encoder_decoder_model.get_layer('encoder')
retrieved_encoder.summary()

它打印:

代码语言:javascript
复制
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

和解码器:

代码语言:javascript
复制
retrieved_decoder = encoder_decoder_model.get_layer('decoder')
retrieved_decoder.summary()

打印的内容:

代码语言:javascript
复制
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: 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60919644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档