【发布时间】:2017-09-29 04:36:16
【问题描述】:
在这里,我通过从逻辑函数指定的两个伯努利分布中随机抽样创建了一个玩具数据集
- 1 / (1 + exp(-0.2 * (x - 20)))
- -1 / (1 + exp(-0.2 * (x - 80)))
我希望我可以训练一个带有 2 节点隐藏层和一个 softmax 激活函数的 keras NNet,该函数可以学习这两个逻辑函数,但生成的模型预测每个 x 值的概率为 1。
library(keras)
train <- data.frame(
x = c(4.44, 8.25, 15.72, 17.53, 17.53, 17.86, 18.57, 20.22, 20.24, 20.57, 21.99, 25.06, 28.3, 31.1, 35.91, 37.29, 38.36, 39.58,
39.78, 40.1, 47.29, 51.67, 51.74, 53.52, 57.45, 62.69, 63.03, 69.03, 70.11, 74.44, 76.4, 79.81, 86.92, 87.59, 89.88),
y = c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
)
head(train, 10)
x y
1 4.44 0
2 8.25 0
3 15.72 0
4 17.53 0
5 17.53 0
6 17.86 0
7 18.57 0
8 20.22 0
9 20.24 1
10 20.57 1
# Build and fit model
model <- keras_model_sequential()
model <- layer_dense(object = model, input_shape = 1L, use_bias = TRUE, units = 2L, activation = 'sigmoid')
model <- layer_dense(object = model, units = 1L, activation = 'softmax', input_shape = 2L)
model <- compile(object = model, loss = 'binary_crossentropy', optimizer = 'sgd', metrics = c('accuracy'))
fit(object = model, x = dt$Age, y = dt$LittleSleep * 1, epochs = 30)
# Evaluate
predict_proba(object = model, x = train$x)[, 1]
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
为什么 Keras 在拟合训练数据方面做得这么差?
【问题讨论】:
-
如何规范化你的 X 值......在 @matias Valdenefro 所说的之上