我正在开发一个相当大的模型,并且我需要使用tf.RunOptions
或其他调试器来简化我的代码,因为我遇到了批处理量很小的OOM错误。但是在使用tf.RunOptions
之后,我遇到了段错误。
我不认为这是一个模型问题,因为下面的代码也会出现问题(而没有runopt
的相同代码正在工作):
import tensorflow as tf
import tensorflow.keras.models as mm
import tensorflow.keras.layers as ll
import numpy as np
model = mm.Sequential([
ll.Dense(27,input_shape=(1,)),
ll.Activation('relu'),
ll.Dense(27),
ll.Activation('softmax')
])
runopt = tf.RunOptions(report_tensor_allocations_upon_oom = True)
model.compile(optimizer='sgd',
loss='mean_squared_error',
metrics=['accuracy'],
options=runopt)
a = np.zeros(27)*10
model.fit(a,a,epochs=10)
在Linux 18.04(tensorflow-gpu上安装了pip,tf version 1.13.1
,python version 3.6.7
,CUDA 9.1.85
,GeForce GTX 980 4GB)
和macOS 10.12.6
上的相同错误(tensorflow -cpu已安装pip tf version 1.13.1
,python version 3.7.2
)
答案 0 :(得分:1)
要使用tf.RunOptions
,还必须使用也 tf.RunMetadata()
!
此问题已解决:
import tensorflow as tf
import tensorflow.keras.models as mm
import tensorflow.keras.layers as ll
import numpy as np
model = mm.Sequential([
ll.Dense(27,input_shape=(1,)),
ll.Activation('relu'),
ll.Dense(27),
ll.Activation('softmax')
])
runopt = tf.RunOptions(report_tensor_allocations_upon_oom = True)
runmeta = tf.RunMetadata()
model.compile(optimizer='sgd',
loss='mean_squared_error',
metrics=['accuracy'],
options=runopt,
run_metadata=runmeta)