我是H2O的新手,我正在尝试使用它作为初始测试来训练神经网络以插入函数。 我正在尝试几个,但没有人工作! 我得到的NN与训练集不匹配。我也尝试通过重新调整数据(为简单起见,此处未附加),但它没有改变。 这是我的代码:
x<- seq(-50, 50, by=0.01)
y1<- x
f1<-data.frame(x, y1)
f1.hex<-as.h2o(f1)
random.vec <- h2o.runif(f1.hex)
train <- f1.hex[random.vec < 0.6, ]
valid <- f1.hex[(random.vec > 0.6) && (random.vec < 0.8),]
test <- f1.hex[random.vec > 0.8, ]
m1 <- h2o.deeplearning(
training_frame=train,
validation_frame=valid,
x=1,
y=2,
activation="RectifierWithDropout", ## default
hidden=c(25,25),
epochs=100,
input_dropout_ratio = 0,
hidden_dropout_ratios = c(0.5, 0.5),
stopping_rounds = 5,
stopping_metric = "AUTO",
stopping_tolerance = 0.001
)
plot(m1, timestep = "duration", metric = "deviance")
summary(m1)
pred <- h2o.predict(m1, f1.hex[,1])
pred.r<- as.data.frame(pred)
我得到一个错误的预测与巨大的偏差...... Altro试图破坏时代和其他参数...... 我哪里错了? 感谢
答案 0 :(得分:0)
我得到了同样可怕的结果。简单的解决方法是停止使用辍学。所以我的代码变成了:
m2 <- h2o.deeplearning(
training_frame=train,
validation_frame=valid,
x=1,
y=2,
activation="Rectifier",
hidden=c(25,25),
epochs=100
)
这不会给出完美的结果,但更好。
为什么呢?辍学是一种处理嘈杂数据的方法。你的数据与噪音极为相反。如果使用丢失,通常需要提供更多隐藏节点和更多时期来补偿。
回到你的线性函数,H2O只做了两个得分事件,一个在10个时期,一个在100个时期。所以,好奇地看看时代有多大帮助,我手动控制了得分何时发生:在这里每5个时代之后。 (对于实际工作,我建议不要这样做,但是为了用这样的人工数据集来踢H2O的轮胎,它可以是教育性的。)
m3 <- h2o.deeplearning(
training_frame=train,
validation_frame=valid,
x=1,
y=2,
activation="Rectifier",
hidden=c(25,25),
epochs=500,
train_samples_per_iteration = 50005, score_each_iteration=TRUE
)
得分历史图表(来自Flow)看起来像:
早期停止在143个时期开始。