【发布时间】:2020-04-26 00:49:42
【问题描述】:
所以我正在尝试使用此代码的修改版本
(https://github.com/snf/keras-fractalnet)
使用 Dense 层 512、128、32、8 而不是卷积层。我相信原版使用(63,3,3),(128,3,3),(256,3,3),(512,3,3),(512,3,3)。由于使用了 4 个宽度为 3 的块,如果我是正确的,我的版本中总共使用了 4536 个节点。除了最后一个块的最后一行之外,所有层都使用 tanh 激活。
我在具有 16GB RAM 的 Ubuntu 18.04 上运行,但我注意到在它(运行 keras 和 TF2)执行 train_on_batch 之后,可用内存从 free -m 命令上的 13232 下降到 9718 并继续在每 20 集后第一次调用 train_on_batch 时减少类似的数量。
现在,我对 Tensorflow 还很陌生,但是每次调用 train_on_batch 时都会减少大约 3GB(如果我没看错的话)对我来说似乎有点极端,所以我希望有人能告诉我我的节点似乎有点极端?或者可能会指出我要寻找的东西的正确方向?如果你想要我,我可以发布我的代码,但我也尝试使用 pat-coady 的 TRPO 代码的修改版本,它使用 PyBullet 构建 NN,这意味着它很长,但如果需要我,我可以至少分享到github上。
更新 2:
感谢 prouast,我已经指出了正确的方向,但我仍然有点困惑。在尝试切换到 float16 而不是 float32 时,我发现每次调用 fractal_net 都会创建 1000 个新的密集层。但是,我只能通过在我的代码中开始出现关于同时使用 float32 和 float16 值的警告来看到这一点。所以我更改了代码,将 20 个密集层初始化一次,然后在每次调用 fractal_net 时使用它们。这似乎有点工作,因为在 train_on_batch 调用上丢失 2+Gb 的 RAM 变得不那么频繁了。但它仍然在这里和那里。
所以我的下一个问题是,是否有子类模型报告当前正在使用多少密集层并占用 RAM?我将尝试再次重新创建 float16 与 float32 警告,因为我忘记了它们是如何创建的,但我希望有一种更直接的方式来查看模型的大小。
我在调用 train_on_batch 之前和之后检查了权重,但我担心权重没有更新。
【问题讨论】:
标签: tensorflow keras ram reinforcement-learning fractals