Tensorflow 在循环中训练keras模型:“;张量不是这个图的一个元素;调用K.clear_session()后保存模型时
我尝试在一个循环中训练多个Keras模型,以评估不同的参数。为了避免内存问题,我在每次构建模型之前调用Tensorflow 在循环中训练keras模型:“;张量不是这个图的一个元素;调用K.clear_session()后保存模型时,tensorflow,keras,Tensorflow,Keras,我尝试在一个循环中训练多个Keras模型,以评估不同的参数。为了避免内存问题,我在每次构建模型之前调用K.clear_session() 添加K.clear\u session()调用后,我在保存第二个模型时开始出现此错误 提升值错误(“张量%s不是此图的元素。”%obj) ValueError:Tensor Tensor(“level1/kernel:0”,shape=(3,3,16),dtype=float32\u ref)不是此图的元素。 在处理上述异常期间,发生了另一个异常: 回溯(最近
K.clear_session()
添加K.clear\u session()
调用后,我在保存第二个模型时开始出现此错误
提升值错误(“张量%s不是此图的元素。”%obj)
ValueError:Tensor Tensor(“level1/kernel:0”,shape=(3,3,16),dtype=float32\u ref)不是此图的元素。
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/gus/workspace/wpy/cnn/srs/train_generators.py”,第286行,在
列车模型(模型defs)
文件“/home/gus/workspace/wpy/cnn/srs/train_generators.py”,第196行,列车模型
model.save(文件路径)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/keras/engine/network.py”,第1090行,保存
保存模型(self、filepath、overwrite、include\u优化器)
文件“/home/gus/workspaces/venvs/dlcv/lib/python3.6/site packages/keras/engine/saving.py”,第382行,在save_模型中
_序列化\u模型(模型、f、包含\u优化器)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/keras/engine/saving.py”,第97行,在序列化模型中
权重值=K.batch\u get\u值(符号权重)
文件“/home/gus/workspaces/venvs/dlcv/lib/python3.6/site packages/keras/backend/tensorflow\u backend.py”,第2420行,在批处理中获取值
返回get_session().运行(ops)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第929行,正在运行
运行_元数据_ptr)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第1137行,正在运行
self.\u图形、回迁、馈送\u dict\u张量、馈送\u句柄=馈送\u句柄)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第471行,在init
self.\u fetch\u mapper=\u FetchMapper.for\u fetch(fetches)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第261行,在for_fetch中
return\u ListFetchMapper(fetch)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第370行,在init
self._mappers=[_FetchMapper.for_fetch(fetch)for fetch in fetches]
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第370行,在
self._mappers=[_FetchMapper.for_fetch(fetch)for fetch in fetches]
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第271行,在for_fetch中
return\u ElementFetchMapper(fetches,contraction\u fn)
文件“/home/gus/workspace/venvs/dlcv/lib/python3.6/site packages/tensorflow/python/client/session.py”,第307行,在init
张量。(%s)'(提取,str(e)))
ValueError:Fetch参数不能解释为张量。(张量张量(“level1/kernel:0”,shape=(3,3,3,16),dtype=float32\u ref)不是此图的元素。)
守则基本上是:
while <models to train>:
K.clear_session()
model = modeldef.build() # everything that has a tensor goes here and just here
# create generators from directories
opt = Adam(lr=0.001, decay=0.001 / epochs)
model.compile(...)
H = model.fit_generator(...)
model.save(file_path) # --> here it crashes
看看类似的问题,我知道问题是因为keras共享一个全局会话,不同模型的不同图形不能混合。
但我不明白为什么在每个模型之前使用K.clear_session()
会使迭代>1时的保存操作失败。为什么张量和变量之间存在差异
不能解释为张量
有人能帮忙吗
谢谢。我错了,我导入了错误的包: 从tensorflow.python.keras将后端导入为K 而不是 将keras.backend作为K导入
我的错误是,我导入了错误的包: 从tensorflow.python.keras将后端导入为K 而不是 将keras.backend作为K导入
class SuperSimpleCNN:
def __init__(self, img_size, depth):
self.img_size = img_size
self.depth = depth
def build(self):
init = Input(shape=(self.img_size, self.img_size, self.depth))
x = Convolution2D(16, (3, 3), padding='same', name='level1')(init)
x = Activation('relu')(x)
out = Convolution2D(self.depth, (5, 5), padding='same', name='output')(x)
model = Model(init, out)
return model