当我在终端运行猜念 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错误的解决
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)