python - 重用中间层作为 Keras 中另一个模型的输入

标签 python machine-learning neural-network keras autoencoder

我正在使用 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取代。

关于python - 重用中间层作为 Keras 中另一个模型的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52534717/

相关文章:

artificial-intelligence - 神经网络是惰性学习方法还是急切学习方法?

machine-learning - 通过机器学习计算图像中的车辆数量

python - 使用 Pandas 拆分数字并为每个数字拆分创建新的单独列

python - 内存错误: Unable to allocate array shape ({very large}), windows Python解决方案

machine-learning - 在回归任务中,如何找到哪些自变量要被忽略或不重要?

python - 如何验证keras模型中的神经网络结构?

Python:os.fork() 是如何工作的?

python - Yfinance - 替代方案?

C++ 相当于 Python difference_update?

python - 如何使用 sklearn 并行拟合梯度提升模型?