如何解决运行导入 TensorFlow 包的 Python 文件报错

如何解决运行导入 TensorFlow 包的 Python 文件报错,第1张

要运行的文件名为 First_TensorFlow_Project.py,在存放该文件的文件夹中,有另一个命名为 string.py 的文件,而 string 和 Python 原生库燃巧中的 string 重名。

当我在终端运行猜念 First_TensorFlow_Project.py 文件之后,会自皮兆键动生成一个 string.pyc 文件,只要有这个文件存在,系统就会报我在问题中提到的错误。

把 string.py 和 string.pyc 删除或者重命名之后就可以正常运行了。

TensorFlow Serving 是一个针对机器学习模型的灵活、高性能的服务系统,专为生产环境而设计。本节实验将使用 TensorFlow Serving 部署 MobileNetV2 模型,并通过两种方法访问 TensorFlow Serving 服务进行图像识别。

在这里我们通过 Docker 来安装 TensorFlow Serving,这也是最便捷的安装方式。Docker 在实验楼环境中已配置,可以直接从镜像仓库中拉取 TensorFlow Serving。森埋在 WebIDE 终端输入:

首先,我们使用 TensorFlow 的官方例子 half_plus_two_cpu 来运行 TensorFlow Serving。

接下来启动 Docker 服务。

docker run 参数解释如下:

-t 为容器重新分配一个伪输入终端。

--rm 容器退出时,自动清理容器内部的文件系统。

-p 指定要映射的 IP 和端口,在这里是容器端口 8501 绑定主机端口 8501,用于 REST 服务。

-v 将宿主机的 $TESTDATA/saved_model_half_plus_two_cpu 目录挂载到容器的 /models/half_plus_two 目录,在这里容器目录必须使用绝对路径。

-e 用于传递环境变量,将 half_plus_two 赋值给 MODEL_NAME 。

通过上述配置,就可以访问正确的地址与端口此型蚂来使用模型了。

通过上面的例子,我们已经学会了如何用 Docker 开启 TensorFlow Serving 服务。接下来,我们将用上一节实验中 Saved Model 格式的 MobileNetV2 模型来进租哗行部署,同时开启 REST API 和 gRPC 服务端口。

REST API 与 gRPC

通过 HTTP 发送 JSON,就是所谓的 REST API。而 gRPC 是由 Google 主导开发的 RPC 框架,使用 HTTP/2 协议并用 ProtoBuf 作为序列化工具。

解压完成后就可以开启 TensorFlow Serving 服务了,在这里我们需要同时开启 REST API 与 gRPC 服务端口。

接下来我们配置 Python 环境来使用 TensorFlow Serving 服务,首先新建一个终端,进行虚拟环境的配置。

进入虚拟环境,安装需要的库。

在桌面创建文件 rest.py,我们将在此文件中实现 REST API 访问服务,先导入需要的库。

然后导入图片,缩放到224×224的大小,对图片进行预处理,打包成 JSON 格式。

最后将数据用 POST 方法发送到 REST API,获得结果并打印。

在终端运行 python rest.py,可以看到预测结果被正确地返回了。

在配置 gRPC 连接的时候,需要提前知道模型结构的信息,在这里可以使用 saved_model_cli 命令来进行查看。

在输出信息中,13 行的 signature_def['serving_default']: 和 15 行的 inputs['input_1'] tensor_info: 是我们需要的模型信息。

在桌面创建文件 gRPC.py,我们将在此文件中实现 gRPC 访问服务,先导入需要的库。

接着配置 gRPC 进行连接。

然后导入图片,缩放到224×224 的大小,对图片进行预处理,转换为 TensorProto 格式。

在配置 gRPC,处理图片完成后,就可以进行预测了。注意,每次只支持传入一条数据进行预测,传入数据时要注意数据格式和模型定义时的格式一致。

在终端运行 python gRPC.py,可以看到返回的预测结果,预测结果格式封装如下:

错误

AttributeError: ‘module’ object has no attribute ‘ceil’

解决冲帆方法:

参考链接

tensorflow2.3+keras2.4.3

2.错误

NotImplementedError: Cannot convert a symbolic Tensor (conv12_offset/meshgrid/Size:0) to a numpy array. This error may indicate that you’re trying to pass a Tensor to a NumPy call, which is not supported

解决方法:

参考链接

更换numpy版本为:numpy1.19.2

3.错误

仍然报错

解决方法:

tensorflow1.15+keras2.3.1+numpy1.16.0

注意:安装完以后,检测tensorflow为2.0版本,所以重新卸载安装!!!

通过如下方式安装(但是下载速度很慢)

conda install tensorflow-gpu==1.15

复制

仍然报错:

解决方法:

tensorflow1.15+keras2.3.1+numpy1.16.0

4.错误

显存不足,添加如下(参考链接:tensorflow.python.framework.errors_impl.InternalError: Blas GEMM launch failed问题解决思路之一)

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)

sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

复制

然后重启,但还是没用!!!!

还是一样的错误,在添加另外一种(参考链接:ubuntu18 下 tensoflow-gpu 2.0 卷积报错:Failed to get convolution algorithm.),如下

physical_devices = tf.config.experimental.list_physical_devices('GPU')

assert len(physical_devices) >0, "Not enough GPU hardware devices available"

tf.config.experimental.set_memory_growth(physical_devices[0], True)

复制

注意:不要认为到这里就结束了,这是一个漫长的等待过程,需要掘余等10分钟左右!!!

等待之后,继续运行…

又是等待的过程,大致15分钟左右!!!

还是报错

然后我把原先的bach-size=2改称bach-size=1(参考链接:data数据集上模型刚启动就报错【Successfully opened dynamic library lib cublas.so.11 Killed】),再次实验,可以往下运行

接着,又有错误

AttributeError: 'bytes' object has no attribute 'encode'

复制

解决方法:

将判判滚

original_keras_version = f.attrs['keras_version'].encode('utf-8').decode('utf-8')

复制

改为

original_keras_version = f.attrs['keras_version'].decode('utf-8')

复制

再重新运行…

又报错,再修改

再重新运行…没有报错

5.错误

将bach-size=1再改为bach-size=2,则出现报错,

解决方法:

参考链接: TensorFlow:Blas GEMM启动失败

安装完python2.7的虚拟环境后,tensorflow-gpu==1.15.0安装失败;

所以,又换种方法,

第一种,将saving.py文件中报错的地方的decode('utf8')前加encode('utf8'),

... ...

original_keras_version = f.attrs['keras_version'].decode('utf8')

... ...

original_backend = f.attrs['backend'].decode('utf8')

... ...

复制

改成

... ...

original_keras_version = f.attrs['keras_version'].encode('utf8').decode('utf8')

... ...

original_backend = f.attrs['backend'].encode('utf8').decode('utf8')

... ...

复制

但是实验失败,

第二种,将saving.py文件中报错的地方的decode('utf8')删除,

... ...

original_keras_version = f.attrs['keras_version'].decode('utf8')

... ...

original_backend = f.attrs['backend'].decode('utf8')

... ...

复制

改成

... ...

original_keras_version = f.attrs['keras_version']

... ...

original_backend = f.attrs['backend']

... ...

复制

实验成功,没有报错。

但是如果还是把batch-size=1换成batch-size=2,还是报错,所以暂时先用batch-size=1

pytorch

python

深度学习

高清播放机,图片大全,点击查看详情!

精选推荐

广告

tf-deformable-conv-layer:可变形卷积层的TensorFlow实现

8下载·0评论

2021年5月6日

Tensorflow2.4.1:fit_generator训练时内存升高导致训练进程结束

1548阅读·1评论·1点赞

2022年4月16日

解决NotImplementedError: Cannot convert a symbolic Tensor to a numpy array.问题

683阅读·0评论·2点赞

2022年10月9日

Tensorflow卷积实现原理+手写python代码实现卷积

1.5W阅读·9评论·21点赞

2018年1月21日

Pytorch 训练与测试时爆显存(out of memory)的一个解决方案

6.1W阅读·44评论·55点赞

2018年11月23日

解决Cannot convert a symbolic Tensor to a numpy array.

2.9W阅读·7评论·2点赞

2020年2月25日

棕榈油批发

精选推荐

广告

Deformable convolutional networks(可变形卷积)使用keras/tensorflow主要代码及注释

3427阅读·3评论·2点赞

2020年2月29日

rknn-toolkit测试示例报错AttributeError: module 'tensorflow' has no attribute 'ceil'

1945阅读·0评论·0点赞

2019年12月24日

可变形卷积:Deformable ConvNets

4621阅读·0评论·3点赞

2020年11月30日

deformable convolution(可变形卷积)算法解析及代码分析

2.0W阅读·49评论·44点赞

2017年8月31日

NotImplementedError: Cannot convert a symbolic Tensor (yolo_boxes_0/meshgrid/Size_1:0) to a numpy ar

2041阅读·0评论·3点赞

2022年2月13日

Tensorflow2.4GPU版安装指南

1715阅读·1评论·5点赞

2021年12月1日

NotImplementedError: Cannot convert a symbolic Tensor报错与解决

2.4W阅读·42评论·48点赞

2021年3月14日

【报错解决】Cannot convert a symbolic Tensor to a numpy array.

1.6W阅读·12评论·9点赞

2021年3月10日

Tensorflow不能调用GPU

733阅读·0评论·0点赞

2021年10月27日

Cannot convert a symbolic Tensor to a numpy array错误的解决


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12132736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存