将Elmo嵌入应用于数据时出现错误。我有7255个句子。
embeddings = embed(
sentences,
signature="default",
as_dict=True)['default']
#Start a session and run ELMo to return the embeddings in variable x
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(tf.tables_initializer())
x = sess.run(embeddings)
错误是:
ResourceExhaustedError:分配带有形状的张量[36021075,50]并在分配器cpu上的/ job:localhost / replica:0 / task:0 / device:CPU:0上键入int32时,OOM [[node module_apply_default / map / TensorArrayStack / TensorArrayGatherV3(定义在C:\ Users ... \ envs \ tf_36 \ lib \ site-packages \ tensorflow_hub \ native_module.py:547)]] 提示:如果要在发生OOM时查看分配的张量的列表,请将report_tensor_allocations_upon_oom添加到RunOptions中以获取当前分配信息。
答案 0 :(得分:0)
ELMo是大型模型。在2层和2个方向上有2048维词嵌入,4096维LSTM状态。仅这是18k浮点数,每个单词71 kB(还有更多:LSTM中的中间投影,用于单词表示的字符级CNN)。您有7,255个句子,平均句子有25个单词,这将提供12 GB RAM,但这是一个非常保守的估计。
您需要将句子分成批处理并迭代处理批处理。有很多方法可以做到这一点,我没有使用什么实现以及变量sentences
中到底有什么。但是您可能可以在sentences
上调用tf.split
并获取要为其单独调用会话的对象的列表,或者如果使用tf.dataset
,则可以使用数据集API提供的批处理。您还可以随时拆分数据并使用多个输入文件。