python - 重用中间层作为 Keras 中另一个模型的输入
问题描述
我正在用 Keras 构建一个 5 层自动编码器。我制作了从输入映射到输出的模型,这很好。我构建了另一个模型,该模型从输入映射到工作正常的潜在编码向量。但是,我随后尝试创建一个解码模型,将潜在编码向量映射到不起作用的输出。
我知道首先我应该为制作该形状的解码模型制作一个输入层,但我无法弄清楚如何将我的编码层数据作为解码模型的输入并让它从编码向量映射到最后一层。
from keras.layers import Input, Dense
from keras.models import Model
from keras.datasets import mnist
import numpy as np
(x_train, _), (x_test, _) = mnist.load_data()
# Prepare data and normalize
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape(len(x_train), -1)
x_test = x_test.reshape(len(x_test), -1)
input_size = 784
hidden_size = 128
coded_size = 64
x = Input(shape=(input_size,))
hidden_1 = Dense(hidden_size, activation='relu')(x)
coded =Dense(coded_size, activation='relu')(hidden_1)
hidden_2 = Dense(hidden_size, activation='relu')(coded)
r = Dense(input_size, activation='sigmoid')(hidden_2)
autoencoder = Model(inputs=x, outputs=r)
encoder = Model(inputs=x, outputs=coded)
decoder_input = Input(shape=(coded_size,)) # should do this, but don't know how to connect it below
decoder = Model(inputs=coded, output=r)
解决方案
你可以这样做:
decoder_input = Input(shape=(coded_size,))
next_input = decoder_input
# get the decoder layers and apply them consecutively
for layer in autoencoder.layers[-2:]:
next_input = layer(next_input)
decoder = Model(inputs=decoder_input, outputs=next_input)
作为旁注,h
您的模型中没有。我认为它必须替换为coded
.
推荐阅读
- node.js - req.isAuthenticated 不是重构中间件后的函数
- typescript - 从嵌套对象的 getter 访问包装对象的属性
- typescript - 具有泛型参数的 typeof 类
- ruby-on-rails - 如何在 Rails 的脚手架资源中添加路由
- python - keras GRU 不会采用我简单的二维数组
- firebase - IONIC 3:推送通知点击什么也不做
- python - python sql查询列表中的时间戳
- three.js - ThreeJS - 为有孔的字符绘制反转的文本面
- java - 无法访问 ArrayList
来自我的 DialogFragment 中的 MainActivity - lisp - 我可以将 lambda 与动态 lambda 列表(没有宏)一起使用吗?