[最佳0.11353! @a1041134926,奖励详见2楼,分数持续更新中] 实战Kaggle比赛:房价预测 讨论区


#229

因为是k次独立训练


#230

你好,请问下为什么我采用你第二轮的方法后loss都为nan了呢?在这过程中需要再对数据进行什么处理吗?


#231
  1. 使用conda安装的环境
    在你的Shell中执行以下命令:
source activate gluon; python -c "import pandas; print(pandas.__version__)"
  1. 其他
python -c "import pandas; print(pandas.__version__)"

如果能正常输出版本号,则代表安装成功了。否则,试试用pip install pandas手动安装。


#232

不知道大佬们是怎么跑到0.10以下的,太厉害了


#233

net.add(gluon.nn.Dense(128, activation=“relu”))
net.add(gluon.nn.Dense(64, activation=“relu”))
net.add(gluon.nn.Dropout(0.2))
net.add(gluon.nn.Dense(1, activation=“relu”))

batch_size = 256
epoch = 800
wd = 10000


#234

刚从朋友那里了解到这套教程,觉得非常好,谢谢沫神


#235

net初始化在gpu上后如果训练报错:


RuntimeError: Parameter sequential316_dense0_weight was not initialized on context gpu(0). It was only initialized on [cpu(0)].

**原因:**在trainer中这句话会将网络重新初始化到cpu上
image
**解决:**可以注释掉或者,尝试下面的方式可行:
image


#236

刚刚上传,1000th:joy:

1024dense,加了dropout=0.2后提升:


#237

加深网络如下:
Sequential(
(0): Dense(None -> 1024, Activation(relu))
(1): Dense(None -> 256, Activation(relu))
(2): Dense(None -> 64, Activation(relu))
(3): Dense(None -> 16, Activation(relu))
(4): Dense(None -> 1, Activation(relu))
)

K折验证很好:
image
但是提交数据后发现严重过拟合:


#238

实验下来发现是ndarray维度的锅,如果y_train是一维(1460,)的话会被默认load到cpu上,需要reshape到二维–>(1460, 1) 才能正确load到gpu上。

在ndarray转换数据处这里代码需要改成赋值语句才会修改y_train的shape

y_train = y_train.reshape((num_train, 1))  #default set 1-d data in cpu??(1460,)-->(1460,1)  need a '=' to reassign

#239

嘻嘻嘻
新手一只,第一次 要求不高 低于0.2
就只是用了简单的多层感知器 没有大家的平均值
但是感受到了乐趣,yeahhhh


#240

第二次提交 又高了一丢丢
哈哈哈 还是看了讨论区里有人说把net设为两层,一个输出2,一个输出1,之前输出太大了,看来这里也有一点点小技巧


#241

刚刚终于突破了0.14,刷到了0.12647 哈哈哈 开心 看下今天能不能突破0.12 yeah
我增加了网络的节点数哦 然后添加了dropout层,等下调节dropout参数试下有没有提高:grinning:


#242

赞~ 贴个图吧


#243


#244

关于房价预测的调参思路总结

learning_rateweight_decay。这两个参数调的时候,是让test loss 尽量去靠近train loss。如果你的train loss本身就很高,调这两个参数只能让test loss达到高中最小值,其实还是高,这个时候需要修改模型来让train loss 变小。所以,什么时候来调learning_rateweight_decay?就是你发现你的train loss已经足够小了,而你的test loss却还很大(也就是test loss差train loss太多)。当然,这并不是说learning_rateweight_decay在动模型时就不要调了,不是这样。为了正确体现你所确定的每一个模型的真实能力,需要给它合适的参数(learning_rateweight_decay)。当确定模型了,就来调这两个让模型发挥出最好的状态。

结合本实验的具体来说,一开始的网络只有一层,这是去调参数会发现,本身train_loss就 0.17多,test_loss 0.18,这时候去调这两个参数,test_loss很难明显提升。

然后我试了加一层简单的 gluon.nn.Dense(10),变化也比较明显一下子,train_loss下降到0.15,test_loss 0.16,再在这个基础上调参数,test_loss只能在0.16上徘徊。

于是我增加节点个数,如30,50, 80,100。随着节点增加,train_loss 变化比较明显,但是越来越出现test_loss跑飞的情况,我知道这是过拟合了,于是调大weight_decay,比如调到50,100,200,慢慢往上加,直到test_loss回到正常值,然后调learning_rate,调到test_loss基本上稳定下来,比如在0.002左右摇摆,这时候就差不多到了目前模型的最佳状态了。这时侯我的test_loss 能达到0.14.可是还不够好。

于是再增加节点,gluon.nn.Dense(350,activation=“relu”) 我心想加这么多,绝对过拟合,于是加了 gluon.nn.Dropout(0.6) 然后再把weight_decay 调大如500,这时候去训练,test_loss 能达到 0.13 提交一次结果到kaggle,得分0.12151。

接下来,继续再调调。不过,我感觉要是不做一定的特征光调参,这个样子差不多就算到了一个极限了。


#245

写的很好,谢谢分享!


#246

报learning_rate得到意想不到的参数的错 是怎么回事? 代码都对啊


#247
__init__() get an unexpected keyword argment 'lerarning_rate'

再往上看你会看到

trainer = gluon.Trainer(net.collect_params(), 'adam',{'lerarning_rate':learning_rate})

你把learning_rate打成了leraning_rate


#248

谢谢 解决了!