我知道从自动编码器中提取的特征可以输入到mlp中用于分类或回归。这是我早些时候做的。
但是如果我有两个自动编码器呢?我能从2个自动编码器的瓶颈层提取特征并将它们输入到基于这些特征的分类的mlp中吗?如果是,那怎么办?我不知道如何连接这两个功能集。我试过了numpy.hs标签()这给了我“不可损坏的切片”错误,但是,使用特氟康卡特()给出了一个错误“模型的输入张量必须是Keras张量”。两个自动编码器的瓶颈层都是维度(None,100)。所以,本质上,如果我水平地堆叠它们,我应该得到一个(无,200)。mlp的隐藏层可能包含一些(num_hidden=100)神经元。谁能帮忙吗?在
x1 = autoencoder1.get_layer('encoder2').output
x2 = autoencoder2.get_layer('encoder2').output
#inp = np.hstack((x1, x2))
inp = tf.concat([x1, x2], 1)
x = tf.concat([x1, x2], 1)
h = Dense(num_hidden, activation='relu', name='hidden')(x)
y = Dense(1, activation='sigmoid', name='prediction')(h)
mymlp = Model(inputs=inp, outputs=y)
# Compile model
mymlp.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Train model
mymlp.fit(x_train, y_train, epochs=20, batch_size=8)
根据@twolffpiggott的建议更新:
^{pr2}$给我一个错误:行中的unshable type:“list”: myMLP=模型(inputs=[autoencoder1.inputs,autoencoder2.inputs],outputs=y)
我也会采用Daniel的第一种方法(为了简单和高效),但是如果您对第二种方法感兴趣;例如,如果您对端到端的网络运行感兴趣,您可以这样做:
编辑
input_data1
和{input_data
)。即使autoencoder1.inputs
返回一个tf张量,这也是unhashable type: list
异常的来源,用[input_data1, input_data2]
替换可以解决这个问题。在x1_train
和{问题是你把numpy数组和keras张量混合在一起。这不能走。在
有两种方法。在
就我个人而言,我会选择第一个。(假设自动编码器已经过训练,不需要更改)。在
第一种方法
第二种方法
这有点复杂,一开始我觉得没什么理由这么做。(当然,在某些情况下,这是个不错的选择)
现在我们完全忘记了numpy和keras张量。在
自行创建mlp(如果以后不使用自动编码器,则很好):
^{pr2}$我们可能想要自动编码器的瓶颈特性,对吧?如果您碰巧创建了正确的自动编码器:编码器模型,解码器模型,连接两者,那么只使用编码器模型就更容易了。其他:
创建关联模型。我们必须使用kera作为连接层:
^{4}$相关问题 更多 >
编程相关推荐