python - 模型将负值预测为零
问题描述
我正在训练具有以下结构的 keras 自动编码器模型:
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(MAX_CONTEXTS, 3)))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(3, activation='relu'))
model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
我的数据是 (number_of_samples, 430, 3) 的形状,包含来自 [-1.9236537371711413, 1.9242677998256246] 的值。该数据已经标准化。然后我训练这个模型:
history = model.fit(X, X, epochs=15, batch_size=2, verbose=1, shuffle=True, validation_split=0.2)
并获得 95.03% 的准确率(怀疑很高,但我现在的问题是别的)。现在当我预测我的数据样本时,正值相对较好,接近它们在输入中的值,但负值都四舍五入为0。这是我选择的损失函数的错误吗?如果是这样,我应该选择哪个其他损失函数?还是我必须以不同的方式扩展我的数据?
解决方案
这是因为您relu
在输出层应用了激活。
推荐阅读
- lua - i2c.address(id, devAdress, i2c.TRANSMITTER) 函数的 FALSE 结果
- docker - 如何使用在 minikube 的主机上运行的 docker 守护进程
- c# - 使用 Linq 为另一个对象列表中的每个项目创建新的对象列表
- rust - 为什么基于它的 len() 索引可变向量被认为是同时借用?
- elixir - 如何解决 HTTPotion conn_failed 间歇性错误
- cassandra - 如何使用不同的网络接口进行 Cassandra 节点间通信?
- javascript - 我应该使用公钥还是私钥来为 JWKS 端点生成模数和指数?
- django - Docker/Python/Django astimezone 似乎从去年开始使用 DST
- python - while 循环和 'and' 逻辑运算符是否对它们可以打印的 int 范围有限制?
- javascript - 这个变量从何而来?