"Tensor"对象在使用tensorflow.keras.backend.shape时没有属性"is_initialized"



我有一个keras模型,当我从keras导入子模块(层、后端函数)时,它运行良好。然而,如果我从tensorflow.keras.导入这些,同样的模型也会崩溃

这里有一个例子说明了这个问题:

if True:
from keras import backend as K
from keras.models import Model
from keras.layers import Input, Lambda
from keras.preprocessing.image import ImageDataGenerator
else:
from tensorflow.keras import backend as K
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Lambda
from tensorflow.keras.preprocessing.image import ImageDataGenerator 
def ex_add(inputs):
"""Made-up example that illustrates the problem"""
ones = K.ones(K.shape(inputs))
return inputs + ones
img_input = Input(shape=(512, 512, 3))
ex = Lambda(pconv_add)(img_input)    
model = Model(inputs=[img_input], outputs=ex)
model.compile(optimizer='Adam', loss='mse')
test_generator = ... # data_generator.flow_from_directory() using ImageDataGenerator
img = next(test_generator)[0]
pconv_predict = model.predict(img)

从keras导入时,一切正常。从tensorflow.keras导入会导致以下情况(当我调用model.predict或model.fit_generator时):

错误:tensorflow:=========================对象从未使用(类型):如果你愿意要将其标记为已使用,请调用其"markused()"方法。它最初在此处创建:文件"/usr/lib/python3.6/runpy.py",第193行,位于_run_module_as_main">main",mod_spec)

(为简洁起见,删除了长消息)

---------------------------------------------------------------------------AttributeError Traceback(最近的调用最后)在()14#模型.summary()15 img=下一个(train_generator)[0][0]--->16 pconv_predict=模型预测(img)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py在predict(self,x,batch_size,verbose,steps,max_queue_size,workers,use_multiprocessing)1876其他:1877返回training_arrays.prediction_loop(->1878 self,x,batch_size=batch_size,verbose=verbose,steps=steps)1879 1880 def train_on_batch(self,x,y=None,sample_weight=无,class_weight=None):

(为简洁起见,删除了长消息)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variables.py在is_variable_initialized(变量)2897中初始化,False否则2898"->2899返回state_ops.is_variable_initialized(变量)2900 2901

/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/state_ops.py在is_variable_initialized(ref,name)中129返回gen_state_ops.is_variable_initialized(ref=ref,name=name)130#处理资源变量。-->131返回ref.is_initialized(name=name)132133

AttributeError:"Tensor"对象没有属性"is_initialized">

问题根源于Lambda层,尤其是K.shape(输入)。我尝试用(4、512、512、3)替换它,无论我导入keras的方式如何,它都能很好地工作。你以前见过这个问题吗?我该怎么解决?

注意,我在Colaboratory上运行此代码。keras和tensorflow.keras版本是2.2.4和2.1.6-tf.

这是一个悬而未决的问题:https://github.com/tensorflow/tensorflow/issues/24938并且仅处于图形模式。在急切的模式下,这可能会奏效。然而,tf.zeros的使用在图形和渴望模式下都很好。

最新更新