nat*_*nay 8 python deep-learning lstm keras
我制作了一个 Keras LSTM 模型,它读取二进制目标值并应该输出二进制预测。但是,预测不是二进制的。我的 X 和 Y 值示例如下:
X Y
5.06 0
4.09 1
4.72 0
4.57 0
4.44 1
6.98 1
Run Code Online (Sandbox Code Playgroud)
我试图预测的是 Xt+1 是否会高于或低于 Xt。如果 Xt+1 大于 Xt,则 Xt 的 Y 值为 1。对于 932 个样本,我的训练 X 值的形状为 (932, 100, 1),“回顾”序列为 100,特征为 1。我得到的预测如下:
Predictions
.512
.514
.513
Run Code Online (Sandbox Code Playgroud)
我认为这些可能是概率,因为我的模型准确度约为 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])
Run Code Online (Sandbox Code Playgroud)
Dan*_*ler 10
这是正常行为。
神经网络中没有“二元”,而是有限范围内的连续函数。
只有使用连续函数,模型才能使用“随机梯度下降”进行训练和学习。
为了尝试实现二元结果,我们使用了从 0 到 1 的 sigmoid 函数。但最初,您的模型没有经过训练,它的所有“权重”都是随机初始化的。结果确实是趋于平均值的结果,在 sigmoid 函数中为 0.5。
你所需要的只是用足够多的数据训练你的模型足够多的时期,所以结果会逐渐接近(但永远不会达到)0 或 1(或你在训练数据中的任何目标“y”)
| 归档时间: |
|
| 查看次数: |
10559 次 |
| 最近记录: |