用tensorflow对图像进行训练,基于tensorflow图像分类实验

  用tensorflow对图像进行训练,基于tensorflow图像分类实验

  这篇文章主要为大家介绍了大蟒深度学习张量流训练好的模型进行图像分类示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  

目录
正文随机找一张图片读取图片进行分类识别最后输出

  

正文

  谷歌在大型图像数据库ImageNet上训练好了一个盗梦空间-第三版模型,这个模型我们可以直接用来进来图像分类。

  下载链接https://pan.baidu.com/s/1XGfwYer5pIEDkpM3nM6o2A :号

  提取码: hu66

  下载完解压后,得到几个文件:

  其中

  classify_image_graph_def.pb文件就是训练好的盗梦空间-第三版模型。

  imagenet _ synset _ to _ human _ label _ map。文本文件(textfile)是类别文件。

  

随机找一张图片

  对这张图片进行识别,看它属于什么类?

  代码如下:先创建一个类节点查找来将分类器概率值映射到标签上。

  然后创建一个函数create_graph()来读取模型。

  

读取图片进行分类识别

  # -*-编码: utf-8 -*-

  将张量流作为法国南部(French Southern Territories的缩写)导入

  将数组作为铭牌导入

  进口是

  导入操作系统

  model_dir=D:/tf/model/

  image=d:/cat.jpg

  #将类别身份转换为人类易读的标签

  类节点查找(对象):

  def __init__(self,

  标签_查找_路径=无,

  uid_lookup_path=None):

  如果不是标签_查找_路径:

  label_lookup_path=os.path.join(

  模型_目录,图像网_ 2012 _挑战_标签_地图_原型。Pb txt’)

  如果不是uid_lookup_path:

  uid_lookup_path=os.path.join(

  模型目录, imagenet _ synset _ to _ human _ label _ map。txt’)

  自我。node _ lookup=自身。load(标签查找路径,uid查找路径)

  定义加载(自身,标签_查找_路径,uid _查找_路径):

  如果不是TF。gfile。存在(uid _ lookup _ path):

  tf.logging.fatal(文件不存在%s ,uid_lookup_path)

  如果不是TF。gfile。存在(标签查找路径):

  tf.logging.fatal(文件不存在“%s”,label_lookup_path)

  #加载从字符串用户界面设计(User Interface Design的缩写)到人类可读字符串的映射

  proto _ as _ ascii _ lines=TF。gfile。gfile(uid _ lookup _ path).读取行()

  uid_to_human={}

  p=re.compile(r[n\d]*[ \S,]* )

  对于协议_as_ascii_lines:中的行

  parsed_items=p.findall(line)

  uid=parsed_items[0]

  human_string=parsed_items[2]

  uid_to_human[uid]=human_string

  #加载从字符串用户界面设计(User Interface Design的缩写)到整数节点身份的映射。

  node_id_to_uid={}

  proto _ as _ ascii=TF。gfile。gfile(标签查找路径).读取行()

  对于proto_as_ascii:中的行

  if线。以( target _ class : ):开头

  target _ class=int(line。拆分( : )[1])

  if线。以(目标类字符串: ):开头

  目标类字符串=行。拆分( : )[1]

  节点标识到用户标识[目标类]=目标类_字符串[1:-2]

  #加载整数节点身份到可读字符串的最终映射

  node_id_to_name={}

  对于键,值在node_id_to_uid.items():中

  如果值不在uid_to_human:中

  tf.logging.fatal(未能找到: %s ,val)

  name=uid_to_human[val]

  node_id_to_name[key]=name

  返回节点标识到名称

  定义标识到字符串(自身,节点id):

  如果节点标识不在self.node_lookup:中

  返回""

  返回self.node_lookup[node_id]

  #读取训练好的盗梦空间-第三版模型来创建图表

  定义创建图形():

  用TF。gfile。fastgfile(操作系统。路径。加入(

  模型_目录,分类_图像_图形_定义. pb ), rb )作为f:

  graph_def=tfGraphDef()

  图形_定义ParseFromString(f.read())

  tf.import_graph_def(graph_def,name= )

  #读取图片

  图像数据=TF。gfile。fastgfile(image, rb ).阅读()

  #创建图表

  create_graph()

  sess=tf .会话()

  #盗梦空间-第三版模型的最后一层分类器的输出

  软max _ tensor=sess。图表。get _ tensor _ by _ name(软最大值:0 )

  #输入图像数据,得到分类器概率值(一个形状=(1,1008)的向量)

  预测=成功。run(软max _ tensor,{ decode jpge/contents :0 : image _ data })

  #(1,1008)-(1008,)

  预测=NP . squish(预测)

  # ID -英文字符串标签。

  node_lookup=NodeLookup()

  #取出前5个概率最大的值(前五名)

  top _ 5=预测。argsort()[-5:][:-1]

  对于top_5:中的节点标识

  人类字符串=节点查找。标识到字符串(节点id)

  分数=预测值[节点标识]

  打印( % s(分数=%。5f) %(human _ string,score))

  sess.close()

  

最后输出

  虎猫(得分=0.40316)

  埃及猫(得分=0.21686)

  虎斑猫,虎斑猫(得分=0.21348)

  猞猁,猫(得分=0.01403)

  波斯猫(得分=0.00394)

  以上就是大蟒深度学习张量流训练好的模型进行图像分类的详细内容,更多关于张量流训练模型图像分类的资料请关注盛行信息技术软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: