作为超参数优化例程的一部分,我使用张量流高级别api tf.contrib.learn.DNNRegressor()
。问题是它为每个实例创建了一个自己的新model_dir,在运行程序期间我无法将其删除(即使在模型被覆盖且不再在RAM中之后)。这是一个问题,因为它消耗相当快的大量磁盘存储。问题如何删除model_dir
:
这是一些伪示例:
import shutil
import tensorflow as tf
X = ... (some large input matrix)
y = ....(some large output vector)
for train, valid in KFoldCV(X, y):
# res: dataframe of random hyper_parameters
for idx, row in res.iterrows():
print(row)
x_1= tf.contrib.layers.real_valued_column("x_1")
x_2= tf.contrib.layers.real_valued_column("x_2")
# DNN specification
optimizer = tf.train.ProximalGradientDescentOptimizer(
learning_rate=float(row['learning_rate']),
l2_regularization_strength=float(row[
'l2_regularization_strength']))
model = tf.contrib.learn.DNNRegressor(
hidden_units=[int(row['hidden_units'])] * int(
row['layers']),
feature_columns=[x_1, x_2],
optimizer=optimizer,
dropout=float(row['dropout']))
model.fit(input_fn=lambda: input_fn(train[0], train[1]),
steps=step)
res['loss']= model.evaluate(....)
shutil.rmtree(model.model_dir)
最后一个语句首先引发了以下错误:
OSError: [WinError 145] The directory is not empty:
如果第二次打电话:
PermissionError: [WinError 5] Access is denied:
编辑: 看来TF事件文件在此过程中允许只读,后台的某些会话阻止这些文件。一旦我终止程序,TF就会自行删除这些文件。