我目前正在重新创建Deepmind的AlphaZero作为个人项目,使用Keras和TensorFlow后端。在每个游戏模拟过程中,我使用的神经网络需要做出许多预测。NN正常工作,但使用了过多的CPU RAM。在
我使用psutil.Process(os.getpid()).memory_info().rss
来打印内存使用情况,当第一次调用model.predict()
时,内存使用量从大约0.3 GB跳到1.6 GB。在连续调用时,不会分配新内存(或至少很少分配内存)。在
我不确定这是否是预期的行为,但我希望程序尽可能高效地运行,就像我希望在谷歌计算引擎上的TPUs上运行一样。在
以下是我的Keras模型的代码:
main_input = Input(shape = self.input_dim, name = 'main_input', dtype="float32")
x = self.conv_layer(main_input, 256, (3,3))
for i in range(19): # AlphaZero used 19
x = self.residual_layer(x, 256, (3, 3))
vh = self.value_head(x)
ph = self.policy_head(x)
model = Model(inputs=[main_input], outputs=[vh, ph])
model.compile(loss={'value_head': 'mean_squared_error', 'policy_head': softmax_cross_entropy_with_logits},
optimizer=SGD(lr=self.learning_rate, momentum = MOMENTUM), #config.MOMENTUM
loss_weights={'value_head': 0.5, 'policy_head': 0.5}
)
神经网络非常大,因此它的大小可能会影响内存分配量,但1.6gb似乎不合理。另外,如果我将模型减少到只有2个剩余层而不是19个,它仍然分配大约1.54GB而不是以前使用的1.6GB。在
目前没有回答
相关问题 更多 >
编程相关推荐