我正在Google Collab的MobileNetv2预训练模型上构建迁移学习模型。直到昨天,一切都很好。但是,今天,在执行
#Create the base model(feature_extractor) from the pre-trained model MobileNet V2
_URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
feature_extractor = hub.KerasLayer(_URL, input_shape=(_TARGET_SIZE, _TARGET_SIZE,3))
我得到了错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-663d4cbb70df> in <module>()
2 _TARGET_SIZE = 224
3 _URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
----> 4 feature_extractor = hub.KerasLayer(_URL, input_shape=(_TARGET_SIZE, _TARGET_SIZE,3))
5 #print(feature_extractor._layers)
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py in _variable_handle_from_shape_and_dtype(shape, dtype, shared_name, name, graph_mode, initial_value)
165 handle_data = cpp_shape_inference_pb2.CppShapeInferenceResult.HandleData()
166 handle_data.is_set = True
--> 167 handle_data.shape_and_type.append(
168 cpp_shape_inference_pb2.CppShapeInferenceResult.HandleShapeAndType(
169 shape=shape.as_proto(), dtype=dtype.as_datatype_enum))
AttributeError: 'google.protobuf.pyext._message.RepeatedCompositeCo' object has no attribute 'append'
任何想法为什么会发生这种情况,我是否需要进入 /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py 文件并制作一些变化 ?我认为它与某些更新问题有关。对如何解决有帮助吗?
答案 0 :(得分:7)
我在tensorflow(版本2.2.0-dev20200128)中遇到了相同的错误,并通过升级protobuf对其进行了修复(如本issue中所述):
pip install -U protobuf==3.8.0
或者如果您使用的是Notebook(例如Google Colab笔记本),请尝试以下操作:
!pip install -U protobuf==3.8.0
答案 1 :(得分:2)
尝试从文件中打开“新Python 3笔记本”并在其中编写代码,即可解决我的问题。
答案 2 :(得分:1)
如果直到昨天运行良好,并且您没有进行任何更改,请检查以下两项: TF版本,如果最近更改了BC,则将“默认” TF版本从1.14设置为1.15.rc。
如果相同,则保存该文件并关闭所有colab窗口,甚至您的chrome或您正在使用的任何浏览器,然后再次打开并尝试运行该文件。
编辑: 正如我上面所说,这一定是因为TF版本。因此,请恢复为模型工作时使用的模型。正如您在下面的评论中提到的那样,它正在使用版本“ dev20191010”,因此回滚它可以解决您的问题。
答案 3 :(得分:1)
我安装了tensorflow并遇到了同样的问题,我做了什么:
第1步:使用以下方法升级protobuf:
pip install -U protobuf==3.8.0
第2步:关闭所有内容或python环境,然后重新启动。
答案 4 :(得分:0)
答案 5 :(得分:0)
我有同样的问题。我重新安装了protobuf = 3.11.3,它再次正常运行。 通过使用:
!pip install -U protobuf==3.11.3
然后也重新启动内核。
答案 6 :(得分:0)
今天2020年6月19日,TF版本2.2.0。我在jupyter笔记本中运行以下命令,然后正确关闭打开的笔记本并关闭jupyter服务器,然后重新启动Anaconda Navigator。终于工作了!!!
Protobuf升级:-
!pip install --upgrade protobuf
答案 7 :(得分:0)
今天2020年6月23日,我通过升级tensorboard bt 2.2.2来解决此问题。 谢谢您提出的问题
答案 8 :(得分:0)
我有一个运行中的示例代码,该代码可加载模型并对某些图像输入进行预测。我想从C#代码中调用预测,这就是为什么我必须安装一个称为winmltools的ONNX转换包的原因。我已经安装了winmltools,并且在python环境(版本3.6)上安装后,在尝试运行先前运行的python代码时,我开始收到此消息。显然,winmltools软件包必须已更改了一些tensorflow支持软件包的版本(可能是protobuf或其他)。我已经使用“ pip install tensorflow”简单地重新安装了tensorflow,安装过程解决了这个问题。
简而言之,首先尝试重新安装tensorflow,看看这是否可以解决您的问题。
答案 9 :(得分:-1)
我遇到了同样的问题。我卸载了protobuf,然后重新安装。问题已解决。