【发布时间】:2019-05-20 16:36:47
【问题描述】:
我有一个如下形式的数据集:对 N 维数据的一系列 M 观察。为了从这些数据中获取潜在因素,我希望制作一个在这些数据上训练的隐藏层自动编码器。单个观察的每个维度都是 0 或 1。但 keras 模型返回浮点数。有没有办法添加一个层来强制输出 0 或 1?
我尝试使用一个简单的 keras 模型来解决这个问题。它声称数据的准确性很高,但在查看原始数据时,它正确地预测了 0,并且通常完全忽略了 1。
n_nodes = 50
input_1 = tf.keras.layers.Input(shape=(x_train.shape[1],))
x = tf.keras.layers.Dense(n_nodes, activation='relu')(input_1)
output_1 = tf.keras.layers.Dense(x_train.shape[1], activation='sigmoid')(x)
model = tf.keras.models.Model(input_1, output_1)
my_optimizer = tf.keras.optimizers.RMSprop()
my_optimizer.lr = 0.002
model.compile(optimizer=my_optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10000)
predictions = model.predict(x_test)
然后我通过查看所有实验并查看是否为 1 的元素返回大 (>0.1) 值来验证这些观察结果。1 的性能非常差。
我已经看到损失在 10000 个 epoch 左右收敛。但是,自动编码器无法正确预测数据集中几乎所有的 1。即使将隐藏层的宽度设置为与数据的维度相同 (n_nodes = x_train.shape[1]),自动编码器的性能仍然很差,如果我增加隐藏层的宽度甚至会恶化。
【问题讨论】:
标签: python tensorflow keras binary autoencoder