【问题标题】:How can i extract the encoded part of multi-modal autoencoder and convert the .h5 model to a numpy array?如何提取多模态自动编码器的编码部分并将 .h5 模型转换为 numpy 数组?
【发布时间】:2020-11-18 22:18:55
【问题描述】:

我正在制作一个深度多模式自动编码器模型,该模型接受两个输入并产生两个输出(它们是重建的输入)。两个输入的形状分别为 (1000, 50) 和 (1000,60),模型有 3 个隐藏层,旨在连接 input1 和 input2 的两个潜在层。

我想提取模型的编码部分并将数据保存为 numpy 数组。

这是模型的完整代码:

input_X = Input(shape=(X[0].shape))

dense_X = Dense(40,activation='relu')(input_X)

dense1_X = Dense(20,activation='relu')(dense_X)

latent_X= Dense(2,activation='relu')(dense1_X)

input_X1 = Input(shape=(X1[0].shape))

dense_X1 = Dense(40,activation='relu')(input_X1)

dense1_X1 = Dense(20,activation='relu')(dense_X1)

latent_X1= Dense(2,activation='relu')(dense1_X1)

Concat_X_X1 = concatenate([latent_X, latent_X1])

decoding_X = Dense(20,activation='relu')(Concat_X_X1)

decoding1_X = Dense(40,activation='relu')(decoding_X)

output_X = Dense(X[0].shape[0],activation='sigmoid')(decoding1_X)

decoding_X1 = Dense(20,activation='relu')(Concat_X_X1)

decoding1_X1 = Dense(40,activation='relu')(decoding_X1)

output_X1 = Dense(X1[0].shape[0],activation='sigmoid')(decoding1_X1)

multi_modal_autoencoder = Model([input_X, input_X1], [output_X, output_X1], name='multi_modal_autoencoder')

encoder = Model([input_X, input_X1], Concat_X_X1)

encoder.save('encoder.h5')

multi_modal_autoencoder.compile(optimizer=keras.optimizers.Adam(lr=0.001),loss='mse')

model = multi_modal_autoencoder.fit([X,X1], [X, X1], epochs=70, batch_size=150) 

【问题讨论】:

    标签: numpy model autoencoder h5py encoder


    【解决方案1】:

    使用h5py 包,您可以进入您的.h5 文件并准确提取您想要的内容:

    f = h5py.File('encoder.h5', 'r')
    keys = list(f.keys())
    values = f.get('some_key')
    

    您可以分层多次使用.get 来深入您的.h5 文件以提取您需要的内容。

    【讨论】:

    • 感谢您的回复,但我的问题的意思是得到以下结果:假设我们有 2 个矩阵并且编码部分旨在连接它们的特征,所以我需要得到编码部分的结果,例如 (1000, 4),其中 4 对应于从 X 中提取的 2 个特征和从 X1 中提取的 2 个特征
    • 我试过你的建议,它给了我 model_weights 作为键。并将<HDF5 group "/model_weights" (9 members)> 作为值。 9名成员是array(['concatenate_1', 'dense_1', 'dense_2', 'dense_3', 'dense_4', 'dense_5', 'dense_6', 'input_1', 'input_2'], dtype='<U13')。就我而言,我想提取 concatenate_1 的值
    • 所以这是一个不同的问题,我误解了这个问题。
    • 请原谅我对问题的错误解释
    • @Andrea,根据您的第二条评论,/model_weights 是一个有 9 个数据集的组。获取concatenate_1 的代码是f['/model_weights/concatenate_1']。这将返回一个行为类似于 NumPy 数组的 h5py 对象。如果您需要一个数组,请使用:f['/model_weights/concatenate_1'][:] -- 最后注意 [:]
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2019-09-13
    • 2019-05-19
    • 2021-06-28
    • 2019-12-10
    • 2020-10-10
    • 2019-10-30
    • 2015-07-02
    相关资源
    最近更新 更多