tutorial系列mnist已经玩过了,这篇玩一下 classify_image,其实就是image label。模型已经训练好的了,直接下载下来在.pb文件中。
本机环境:
Win10 + Python3.5 +
调用
maybe_download_and_extract函数中的urllib.request.urlretrieve()方法出错,出现了一个证书认证的错误。
错误:
ssl.CertificateError: hostname
SSL:全名
解决:
在代码中使用非认证的ssl内容:Secure socket layer安全套接字层,是一个由第三方机构来保证用户端和服务器能够使用安全加密链接通道通信的协议。它会给受信任的服务器颁发证书CA,这份证书用来秘密传递公钥。他们都是使用公钥加密数据,然后使用各自的私钥来进行解密。
“公共密钥可广泛使用。相反,专用密钥为特定个人所有。将公共密钥传送至用户的分发机制称为证书。证书一般由证书颁发机构 (CA) 签名,以确认公共密钥来自于要求发送公共密钥的主体。CA 是相互信任的实体。
数字认证的典型实现包括证书签名过程。该过程如下图中所示。”
1. | Alice 将一个签名的证书请求发送到 CA,该证书包含有她的姓名、公共密钥以及可能的附加信息。 |
2. | CA 根据 Alice 的请求创建一个消息。CA 使用自己的专用密钥对消息进行签名,以创建一个单独的签名。CA 将消息和签名返回给 Alice。Alice 的证书中包含了消息和签名。 |
3. | Alice 将她的证书发送给 Bob,让他有权访问她的公共密钥。 |
4. | Bob 使用 CA 的公共密钥验证证书的签名。如果证明签名有效,则他会接受证书中的公共密钥作为 Alice 的公共密钥。 |
import sslssl._create_default_https_context = ssl._create_unverified_context
错误:
TensorFlow 中的路径错误的问题
原因:
这个tutorial例子都是按照Linux下的路径写的比如./tmp/imagenet
如果是win下记得改成.//tmp//imagenet
所以第一件事儿是改路径,改路径!
注意:
不管是在 docker还是在 Windows下运行 ,都你只需要将py中路径格式写成当前系统相关的路径格式就好了。比如 windows 下就是\\ linux下 /
如果需要label自己的image,那么需要修改image_file的default = 绝对路径
parser.add_argument( '--image_file', type=str, default='C:\\Users\\501-PC\\Desktop\\models-master\\tutorials\\image\\imagenet\\pipos.jpg', help='Absolute path to image file.' )
关于下载下来的压缩包中包含的文件:
classify_image_graph_def.pb 里面存放的是已经训练好的model的结果。包括:权重weight 以及 图graph
imagenet_synset_to_human_label_map.txt 存放的是label的text内容 与 ImageNet_synset的对应。 example: n00007846 person, individual, someone, somebody, mortal, soul
imagenet_2012_challenge_label_map_proto.pbtxt 存放的是ImageNet 2012 全部数据的UID 与其 目标类型int32
entry { target_class: 449 target_class_string: "n01440764"}
cropped_panda.jpg 就是那张可爱的panda了
综上,classify_image.py 是一个很好的练习使用 已经训练好的模型来使用自己的input得到结果的 tutorial。