Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于pytorch训练无法收敛的问题 #130

Open
hxb123622 opened this issue Dec 5, 2022 · 6 comments
Open

关于pytorch训练无法收敛的问题 #130

hxb123622 opened this issue Dec 5, 2022 · 6 comments

Comments

@hxb123622
Copy link

作者您好,非常感谢您提供的这个非常棒的alpha go zero算法工程!感谢您能够百忙���中抽看去看我的问题:我使用pytroch去训练,发现loss值始终下降不下去,一直在6-7左右徘徊,不知到您是否有遇到过类似的问题?有什么解决的办法吗?(您在先前问题提到的explain_val=0的问题我也遇到过,但大部分情况都是有值的)

根据您往期的回答,您貌似是只在theano上完整训练过网络,我在使用该网络后得到了和您类似的loss曲线,所以我猜测是pytorch和theano的差异导致pytorch训练无法收敛。我将Theano训练出来的权重生成pytorch的权重文件拿来使用后,得到的结果仍然不理想,所以,是不是因为两者在前向传播的过程当中就存在不同?
我目前使用的版本是pytorch==1.12.0,cpu和gpu都试过,我还在pytroch==0.4.1上尝试过,但是还是没能解决问题。调试超参数貌似也不能很好的解决这个问题

@hxb123622
Copy link
Author

我在比对了pytorch版本和numpy版本的函数之后,我发现pytorch版本在出概率数组前的最后一个运算公式是log_softmax,而numpy版本则是softmax,这可能是pytroch版本无法使用的一个重要原因。

@ljn114514
Copy link

您好,请问您的问题解决了吗,使用pytorch能否可以正常训练

@hxb123622
Copy link
Author

我目前可以训练的最好结果就是和模拟1000次的纯MCTS算法对战胜负为8:2,loss值从8下降到了3.9左右。和作者对战模拟5000次纯MCTS算法胜负9:1还有很大的差距,实际对战之后也确实发现算法不能用。但是我把作者训练好的theano权重转换成pytorch权重格式之后发现算法是可以正常使用的,和numpy版本和theano版本的下子格式是一样的。

唯二的改动就是把pytorch中的logsoftmax换成softmax以及将全连接层中的数组倒序排列(这个你看神经网络的中间特征图就能明白)。

如果你想训练自己的权重的话我建议你把pytorch中的logsoftmax换成softmax试试,记得把训练的公式也改一下(因为原公式默认输出的结果是经过了log运算的)

@ljn114514
Copy link

感谢回复,您说的算法不能用是指和人类对战的效果很差吗,转换theano权重可以正常使用是和人类可以正常对战的意思吗

@hxb123622
Copy link
Author

感谢回复,您说的算法不能用是指和人类对战的效果很差吗,转换theano权重可以正常使用是和人类可以正常对战的意思吗

是的

@ljn114514
Copy link

我目前可以训练的最好结果就是和模拟1000次的纯MCTS算法对战胜负为8:2,loss值从8下降到了3.9左右。和作者对战模拟5000次纯MCTS算法胜负9:1还有很大的差距,实际对战之后也确实发现算法不能用。但是我把作者训练好的theano权重转换成pytorch权重格式之后发现算法是可以正常使用的,和numpy版本和theano版本的下子格式是一样的。

唯二的改动就是把pytorch中的logsoftmax换成softmax以及将全连接层中的数组倒序排列(这个你看神经网络的中间特征图就能明白)。

如果你想训练自己的权重的话我建议你把pytorch中的logsoftmax换成softmax试试,记得把训练的公式也改一下(因为原公式默认输出的结果是经过了log运算的)

您好,想再问一下“全连接层中的数组倒序排列”是需要改动哪一行

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants