Keras / TF循环层(GRU,LSTM)初始化时冻结内核

时间:2017-11-03 09:50:17

标签: python linux python-3.x tensorflow keras

在我家的机器上,我遇到了一个问题,这个问题在我的工作机器上没有发生。具体来说,Python在初始化中等大小的重复层时冻结并锁定内核(我甚至无法中断)。

以下是一个可重复性最小的例子:

from keras.models import Model  # Keras 2.x
from keras.layers import Input, GRU
from keras import backend as K  # TensorFlow (1.3) backend

input_stuff = Input(shape=(1, 2048))  # Works
print(K.int_shape(input_stuff))  # Works
encoder = GRU(512, return_state=False, stateful=False)  # Works
gru_out = encoder(input_stuff)  # Freezes here
print(K.int_shape(gru_out))

当我用LSTM而不是GRU尝试它时,会发生同样的事情。 (如果您使用具有单个时间步长的输入的复现层明显奇怪,请忽略。)

当它冻结时,它就会永远运行。 (可能在某些时候停止,但我总是在它之前杀死所有东西。)粉丝最终呻吟,好像它正在做一些真正的工作。我注意到可用RAM没有明显的吸引力。我还注意到,此时TensorFlow在GPU上没有分配内存。另一方面,CPU负载高达约400%(这是一台八核机器)。

我最近通过pip安装了TensorFlow 1.4,但这是在Python 3.6内核上加载1.3。一些迷路点:

  • 使用更小的输入工作初始化更多更小的图层(例如,20)。但是,杀死它并不需要花费太多。
  • 此处失败的代码在运行Python 3.5的Conda环境中运行迅速且没有问题。它也可以在我的办公室计算机上使用类似(但不完全相同)的包配置。
  • 配置方面,我的家用机器至少和我的工作机器一样强大,所以这不是硬件问题(假设硬件工作正常)。
  • 我能够运行其他代码来训练CNN而没有问题。但是,在此计算机上运行良好的分层LSTM网络的早期代码现在会产生相同的错误。

我怀疑这是一个软件包/模块或版本冲突。我承认我没有像我应该使用单独的环境那样小心,而不是把所有东西都集中在我的核心沙盒代码时构建Python。我的机器上有一些相互冲突的模块版本(一些通过pip,一些通过Conda),所以也许这是我学习的一课。

一个“修复”显然是使用Conda环境,在这种情况下,它不会给我任何问题。但这是一个奇怪的症状;我真的很想了解为什么正在发生。

系统信息:

  • 操作系统:Ubuntu 16.04 LTS
  • 内存:31.4 GiB
  • 处理器:Intel®Core™i7-7700K CPU @ 4.20GHz×8
  • GPU:GeForce GTX 1080 Ti / PCIe / SSE2

对于包裹信息(yikes),“conda list”的输出为here

0 个答案:

没有答案