训练我的数据导致非常奇怪的冗长:
loss: -35657827.5218 - accuracy: 0.5018 - categorical_accuracy: 1.0000
预期的预测结果是-1、0或1。但训练后的模型只输出0
我准备了 200 万行数据,结构如下。 这些都是特点。它们是介于 -1 和 1 之间的浮点值。
[
"relative_price_week",
"relative_price_day",
"relative_price_hour",
"relative_price_fivemin",
"relative_volume_week",
"relative_volume_day",
"relative_volume_hour",
"swing_month",
"swing_week",
"swing_day",
"swing_hour",
"swing_fivemin",
]
并且输出应该是三个选项之一,-1、0 或 1。
input = Input(shape=(12,))
x = Dense(64, activation='relu')(input)
x = Dense(32, activation='relu')(x)
x = Dense(16, activation='relu')(x)
output = Dense(1, activation='sigmoid')(x)
model = Model(inputs=input, outputs=output)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', 'categorical_accuracy'])
model.fit(train_features, train_labels, batch_size=100000, epochs=10)
该模型的先前版本也会产生无意义的数据。我的意思是,它只会输出几个固定输出中的一个。
一个版本将具有三个输出列 ['buy_conf', 'hold_conf', 'sell_conf']
,每个列代表一个介于 0 和 1 之间的值。
不幸的是,这也会导致精度为 0.9 的奇怪输出和类似的负损失。此模型的训练输出也会将极少数选项之一作为每列的输出。
答案 0 :(得分:2)
sigmoid
激活函数可以输出一个介于 0 和 1
之间的值
但是您的标签 -1,0,1 不在 0 和 1
范围内
因此,在最后的 tanh
层中使用 Dense
激活函数而不是 sigmoid
将起作用,因为 tanh
的范围为 -1 到 1
答案 1 :(得分:0)
我最终没有找到使用 Tensorflow 的解决方案。
我最终使用了 ML.net,这更适合我的情况,因为我的应用程序的其余部分使用 C#。
它还对初学者友好,可以轻松完成我想做的事情。
这不是适合所有人的解决方案,但如果其他人阅读了此内容,也许它也适用于您的情况。