对未标记数据使用自动编码器,并重复使用权重来训练标记数据

时间:2018-02-20 14:24:35

标签: python tensorflow keras

我的情况是,我有少量标记的示例和大量未标记的示例。

我正在使用自动编码器模型来训练未标记的示例。

现在我想用标签训练编码器。我的疑问是,通过编译编码器模型,我是在创建一个新模型而不是重用自动编码器的权重吗?

编码器模型是单独的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)

提前致谢

1 个答案:

答案 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)

你会发现权重有所不同,而根本没有受过监督的训练。这是因为输出编码的密集层由两个模型共享。请注意,模型是不同的对象与共享图层。