python - 二元 Keras LSTM 模型不输出二元预测

标签 python deep-learning keras lstm

我制作了一个 Keras LSTM 模型,该模型读取二进制目标值并应该输出二进制预测。但是,预测不是二元的。我的 X 和 Y 值示例如下:

X      Y
5.06   0
4.09   1
4.72   0
4.57   0
4.44   1
6.98   1 

我试图预测的是 Xt+1 会高于还是低于 Xt。如果 Xt+1 大于 Xt,则 Xt 的 Y 值为 1。我的训练 X 值的形状为 (932, 100, 1),932 个样本,100 个“回顾”序列,1 个特征。我得到的预测如下:

Predictions
.512
.514
.513

我认为这些可能是概率,因为我的模型准确率约为 51%。关于如何使它们成为二进制的任何想法?完整模型代码如下:

# Defining network architecture
def build_model(layers):
    model = Sequential()

    model.add(LSTM(
        input_dim=layers[0],
        output_dim=layers[1],
        return_sequences=True))
    model.add(Dropout(0.2))

    model.add(LSTM(
        layers[2],
        return_sequences=False))
    model.add(Dropout(0.2))

    model.add(Dense(
        output_dim=layers[3]))
    model.add(Activation("sigmoid"))

    start = time.time()
    model.compile(loss="binary_crossentropy", optimizer="rmsprop",metrics=['accuracy'],class_mode="binary")
    print("> Compilation Time : ", time.time() - start)
    return model

# Compiling model
model = build_model([1, 100, 500, 1])

最佳答案

这是正常行为。

神经网络中没有“二进制”,而是在一定范围内的连续函数。

只有使用连续函数,模型才能使用“随机梯度下降”进行训练和学习。

为了尝试获得二进制结果,我们使用了从 0 到 1 的 sigmoid 函数。但最初,您的模型没有经过训练,它的所有“权重”都是随机初始化的。结果确实是趋于均值的结果,在 sigmoid 函数中为 0.5。

您所需要的只是用足够多的数据训练您的模型,这样结果就会逐渐接近(但永远不会达到)0 或 1(或训练数据中的任何目标“y”)

关于python - 二元 Keras LSTM 模型不输出二元预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040656/

相关文章:

deep-learning - 如何修改 Imagenet Caffe 模型?

python - 为什么我的非常简单的 input() 代码不起作用?

python - 2D numpy 数组输入的 Tensorflow Keras Conv2D 错误

python - 这种 Python 生产者-消费者无锁方法是线程安全的吗?

tensorflow - 如何从 Pandas DataFrame 到用于 NLP 的 Tensorflow BatchDataset?

python - 训练深度学习模型时出错

python - Keras 不能添加一个数字数组,产生一个标量吗?

python-3.x - Keras 中具有不同数据类型的深度学习模型

python - 映射字典与大陆 : Country to a DataFrame with a Country Column

python - 列表和+=操作