1、复现VGG训练自定义图像分类,成功了哈哈。

  需要代码工程可联系博主qq号,在左边连接可找到。

  核心代码:

  1. # coding:utf-8
  2. import tensorflow as tf
  3. import os
  4. from load_vgg19_model import net
  5.  
  6. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
  7.  
  8. def VGG19_image_classifier(X,Y,nn_classes):
  9.  
  10. vgg19_path = "./vgg19_model/imagenet-vgg-verydeep-19.mat"
  11. net_list,mean_pixel,all_layers = net(vgg19_path,X)
  12.  
  13. vgg19_pool5 = net_list[-1]["pool5"]
  14.  
  15. vgg19_pool5_shape = vgg19_pool5.get_shape().as_list()
  16.  
  17. vgg19_pool5_number = vgg19_pool5_shape[1]*vgg19_pool5_shape[2]*vgg19_pool5_shape[3]
  18.  
  19. weights = {
  20. 'wd1': tf.Variable(tf.random_normal([vgg19_pool5_number, 4096])),
  21. 'wd2': tf.Variable(tf.random_normal([4096, 4096])),
  22. 'out': tf.Variable(tf.random_normal([4096, nn_classes]))
  23. }
  24.  
  25. biases = {
  26. 'bd1': tf.Variable(tf.zeros([4096])),
  27. 'bd2': tf.Variable(tf.zeros([4096])),
  28. 'out': tf.Variable(tf.zeros([nn_classes]))
  29. }
  30.  
  31. # 全连接一层
  32. _densel = tf.reshape(vgg19_pool5, [-1, vgg19_pool5_number])
  33.  
  34. fc6 = tf.add(tf.matmul(_densel,weights["wd1"]),biases["bd1"])
  35. relu6 = tf.nn.relu(fc6)
  36.  
  37. # 全连接二层
  38.  
  39. fc7 = tf.add(tf.matmul(relu6,weights["wd2"]),biases["bd2"])
  40. relu7 = tf.nn.relu(fc7)
  41.  
  42. # 输出层
  43. fc8 = tf.add(tf.matmul(relu7,weights["out"]),biases["out"])
  44.  
  45. # out = tf.nn.softmax(fc8)
  46. out = fc8
  47.  
  48. # 损失函数 loss
  49. loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=out)) # 计算交叉熵
  50.  
  51. # 优化目标 optimizing
  52. optimizing = tf.train.AdamOptimizer(0.0001).minimize(loss) # 使用adam优化器来以0.0001的学习率来进行微调
  53.  
  54. # 精确度 accuracy
  55. correct_prediction = tf.equal(tf.argmax(Y, 1), tf.argmax(out, 1)) # 判断预测标签和实际标签是否匹配
  56. accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
  57.  
  58. # 想要保存的模型参数,方便加载找到。
  59. tf.add_to_collection("loss", loss)
  60. tf.add_to_collection("out", out)
  61. tf.add_to_collection("accuracy", accuracy)
  62. tf.add_to_collection("optimizing", optimizing)
  63.  
  64. return {
  65. "loss": loss,
  66. "optimizing": optimizing,
  67. "accuracy": accuracy,
  68. "out": out,
  69. "mean_pixel":mean_pixel
  70. }

  

  小批量梯度训练方法如下图,才训练1次达到88%。

复现VGG19训练自定义图像分类的更多相关文章

  1. 基于Tensorflow + Opencv 实现CNN自定义图像分类

    摘要:本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验. 本文分享自华为云社区< ...

  2. Tesseract-OCR-v5.0中文识别,训练自定义字库,提高图片的识别效果

    1,下载安装Tesseract-OCR 安装,链接地址https://digi.bib.uni-mannheim.de/tesseract/ ​ 2,安装成功 tesseract -v 注意:安装后, ...

  3. Yolo训练自定义目标检测

    Yolo训练自定义目标检测 参考darknet:https://pjreddie.com/darknet/yolo/ 1. 下载darknet 在 https://github.com/pjreddi ...

  4. [炼丹术]YOLOv5训练自定义数据集

    YOLOv5训练自定义数据 一.开始之前的准备工作 克隆 repo 并在Python>=3.6.0环境中安装requirements.txt,包括PyTorch>=1.7.模型和数据集会从 ...

  5. yolov5训练自定义数据集

    yolov5训练自定义数据 step1:参考文献及代码 博客 https://blog.csdn.net/weixin_41868104/article/details/107339535 githu ...

  6. 利用Tensorflow训练自定义数据

    很多正在入门或刚入门TensorFlow机器学习的同学希望能够通过自己指定图片源对模型进行训练,然后识别和分类自己指定的图片.但是,在TensorFlow官方入门教程中,并无明确给出如何把自定义数据输 ...

  7. tensorflow从训练自定义CNN网络模型到Android端部署tflite

    网上有很多关于tensorflow lite在安卓端部署的教程,但是大多只讲如何把训练好的模型部署到安卓端,不讲如何训练,而实际上在部署的时候,需要知道训练模型时预处理的细节,这就导致了自己训练的模型 ...

  8. MMDetection 快速开始,训练自定义数据集

    本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...

  9. Scaled-YOLOv4 快速开始,训练自定义数据集

    代码: https://github.com/ikuokuo/start-scaled-yolov4 Scaled-YOLOv4 代码: https://github.com/WongKinYiu/S ...

随机推荐

  1. Scala快速入门-基本数据结构

    模式匹配 使用用模式匹配实现斐波那契 def fibonacci(in: Any): Int = in match { case 0 => 0 case 1 => 1 case n: In ...

  2. OSG学习:使用已有回调示例

    回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情.这个函数就叫做回 ...

  3. 【week2】 累计进度条、psp、饼图

    每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间 2016年9月9日 读书 构建之法-5.6章 19:00 20:00 0 60min 2016年9月10日 看博客 ...

  4. ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )

    为了测试docker的挂载权限,把宿主机的/etc/passwd文件挂载到了虚机当中,进入虚机想看下能不能直接对我宿主机上的文件进行操作,把/etc/passwd删掉了最后十行...结果宿主机上的/e ...

  5. React & `event.persist()`

    React & event.persist() event.persist() https://reactjs.org/docs/events.html#event-pooling Tabs ...

  6. 第一章 Spring 概述

    Spring框架的生态,已经成了JavaWeb开发的事实标准 以IOC与AOP为基础,提供了一整套JavaWeb的开发解决方案 在需要引入功能前,先看看有没有Spring的实现,或者其他框架,看看能否 ...

  7. RT-thread内核之小内存管理算法

     一.动态内存管理 动态内存管理是一个真实的堆(Heap)内存管理模块,可以在当前资源满足的情况下,根据用户的需求分配任意大小的内存块.而当用户不需要再使用这些内存块时,又可以释放回堆中供其他应用分配 ...

  8. 第三方框架-纯代码布局:Masonry的简单使用

    Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API.系统AutoLayout支持的操作,Masonry都支持,相比系统AP ...

  9. AC自动机裸题

    HDU 2222 Keywords Search 模板题.对模式串建立AC自动机然后在trie树上找一遍目标串即可. # include <cstdio> # include <cs ...

  10. BZOJ 1509 逃学的小孩(树的直径)

    题意:从树上任找三点u,v,w.使得dis(u,v)+min(dis(u,w),dis(v,w))最大. 有一个结论u,v必是树上直径的两端点. 剩下的枚举w就行了. 具体不会证... # inclu ...