我的情况是,我有少量标记的示例和大量未标记的示例。
我正在使用自动编码器模型来训练未标记的示例。
现在我想用标签训练编码器。我的疑问是,通过编译编码器模型,我是在创建一个新模型而不是重用自动编码器的权重吗?
编码器模型是单独的CNN模型还是仍然是自动编码器的一部分?
x = Input(shape=(input_dim,))
encoder = Dense(output_dim)(x)
decoder = Dense(input_dim)(encoder)
autoencoder = Model(input=x, output=decoder)
out=dense(10,activation='softmax')(encoder)
supervised = Model(input=x, output=out)
autoencoder.compile(...)
supervised.compile(...)
autoencoder.fit(x1,x1)
supervised.fit(x2,y2)
supervised.predict(x3)
提前致谢
答案 0 :(得分:0)
如果通过autoencoder的编码器部分,你的意思是他们共享图层?
是,他们这样做。但是它们可以进行不同的编译。这意味着您可以为它们提供不同的优化器,损失函数等。
检查这一点的简单方法就是在训练特定模型(如
)之前和之后进行预测x = Input(shape=(input_dim,))
encoder = Dense(output_dim)(x)
decoder = Dense(input_dim)(encoder)
autoencoder = Model(input=x, output=decoder)
out=dense(10,activation='softmax')(encoder)
supervised = Model(input=x, output=out)
autoencoder.compile(...)
supervised.compile(...)
weights_before = supervised.layers[1].get_weights()
autoencoder.fit(x1,x1)
weights_after = supervised.layers[1].get_weights()
print(weights_before, weights_after)
supervised.fit(x2,y2)
supervised.predict(x3)
你会发现权重有所不同,而根本没有受过监督的训练。这是因为输出编码的密集层由两个模型共享。请注意,模型是不同的对象与共享图层。