这篇文章主要阐述加载已经训练好的Imagenet VGG-19网络对图像猫进行识别,并且可视化VGG网络卷积层的特征图像。
下载Imagenet VGG-19
http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat
加载Imagenet VGG-19
完整代码如下:

import scipy.io
import numpy as np
import os
import scipy.misc
import matplotlib.pyplot as plt
import tensorflow as tfdef _conv_layer(input, weights, bias):conv = tf.nn.conv2d(input, tf.constant(weights), strides=(1,1,1,1), padding='SAME')return tf.nn.bias_add(conv, bias)def _pool_layer(input):return tf.nn.max_pool(input, ksize=(1,2,2,1), strides=(1,2,2,1), padding='SAME')def preprocess(image, mean_pixel):return image - mean_pixeldef unprocess(image, mean_piexl):return image + mean_piexldef imread(path):return scipy.misc.imread(path).astype(np.float)def imsave(path, img):img = np.clip(img, 0, 255).astype(np.int8)scipy.misc.imsave(path, img)print('functions for vgg ready')def net(data_path, input_image):layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1','conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2','conv3_1', 'relu3_1', 'conv3_2', 'relu3_2','conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3','conv4_1', 'relu4_1', 'conv4_2', 'relu4_2','conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4','conv5_1', 'relu5_1', 'conv5_2', 'relu5_2','conv5_3', 'relu5_3', 'conv5_4', 'relu5_4')data = scipy.io.loadmat(data_path)mean = data['normalization'][0][0][0]mean_pixel = np.mean(mean, axis=(0,1))weights = data['layers'][0]net = {}current = input_imagefor i, name in enumerate(layers):kind = name[:4]if kind == 'conv':kernels, bias = weights[i][0][0][0][0]kernels = np.transpose(kernels, (1, 0, 2, 3))bias = bias.reshape(-1)current = _conv_layer(current, kernels, bias)elif kind == 'relu':current = tf.nn.relu(current)elif kind == 'pool':current = _pool_layer(current)net[name] = currentassert len(net) == len(layers)return net, mean_pixel, layersprint('network for vgg ready')cwd = os.getcwd()
vgg_path = cwd + '/data/imagenet-vgg-verydeep-19.mat'
img_path = cwd + '/data/cat.jpeg'
input_image = imread(img_path)
shape = (1, input_image.shape[0], input_image.shape[1], input_image.shape[2])with tf.Session() as sess:image = tf.placeholder('float', shape=shape)nets, mean_pixel, all_layers = net(vgg_path, image)input_image_pre = np.array([preprocess(input_image, mean_pixel)])layers = all_layersfor i, layer in enumerate(layers):print('[%d/%d] %s' % (i+1, len(layers), layer))features = nets[layer].eval(feed_dict={image: input_image_pre})print('Type of ‘features’ is ', type(features))print('Shape of ‘features’ is ', (features.shape,))if 1:plt.figure(i+1, figsize=(10, 5))plt.matshow(features[0, :, :, 0], cmap=plt.cm.gray, fignum=i+1)plt.title(''+layer)plt.colorbar()plt.show()

卷积层特征图像显示
vgg-19网络的输入图片如下

各卷积层的特征图像

Imagenet VGG-19网络加载和特征可视化相关推荐

  1. android快捷开发之Retrofit网络加载框架的简单使用

    大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...

  2. java加载自己写的类_java 自定义类加载器从磁盘或网络加载类

    一.编写自定义类加载器类 package com.mybatis.entity; import java.io.ByteArrayOutputStream; import java.io.File; ...

  3. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体 ...

  4. android 自定义域名,Android基于Retrofit2改造的可设置多域名的网络加载框架

    Android基于Retrofit2改造的可设置多域名的网络加载框架 1.使用说明 添加仓库 ``` allprojects { repositories { google() jcenter() m ...

  5. Flutter Image从网络加载图片刷新、强制重新渲染

    Flutter自带的Image.network()从网络加载图片后,如果服务器上的图片改变了,但是url没变,就算使用setState进行rebuild,图片也不会跟着更新.这是因为Image自带了c ...

  6. Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)

    android 应用中,如欢迎指引页面, 和图片轮播功能, 或者更多的内容在一页显示不了,要分成多个页面,这时候viewpager是很好用的. 首先看下效果: 下面是一个例子,带异步网络加载图片,并带 ...

  7. 网络加载框架 - Retrofit

    Retrofit是什么? Retrofit其实我们可以理解为OkHttp的加强版,它也是一个网络加载框架.底层是使用OKHttp封装的.准确来说,网络请求的工作本质上是OkHttp完成,而 Retro ...

  8. jnlp(Java网络加载协议)原来很简单

    jnlp(Java网络加载协议)原来很简单 Java Network Launching Protocol (JNLP,java网络加载协议). jnlp是什么?是java提供的一种让你可以通过浏览器 ...

  9. java网络加载协议JNLP的应用

    JAVA WEB Start技术我们在网络上很多地方看到过,包括一些自动更新功能也是用这项技术.     jnlp是什么?是java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可 ...

最新文章

  1. AI寒冬将至?这10大突破点至关重要
  2. Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)(转载)
  3. jquery-$()函数的用法及一些常用的选择器
  4. Python中用dict统计列表中元素出现的次数
  5. NODE_PATH的疑难杂症(转)
  6. 今天整理了一些老作品
  7. 机器学习两种距离——欧式距离和马氏距离
  8. 模板:树上启发式合并(dsu on tree)
  9. 基础笔试编程题(jz)
  10. php unset函数_PHP | 使用unset()函数从数组中删除元素
  11. MariaDB 10 Slave Crash-Safe需转为GTID复制模式
  12. 2008安装完了找不到_【专业性】关于铸铝热水锅炉安装使用的思考
  13. Linux 制作系统镜像
  14. 日志管理系统rsyslogd
  15. 显著性检测(一)Saliency Detection: A Spectral Residual Approach
  16. opencv读取颜色通道
  17. arduino UNO利用74hc595级联控制16个LED状态
  18. 2021年一战南大AI上岸经验贴
  19. [kubernetes]-通过initcontainer监控job是否完成
  20. XTU—OJ 1258矩阵

热门文章

  1. asio 异步demo
  2. Eigen教程1 - 基础
  3. windows 关闭端口被占用脚本
  4. java单例模式-有用的模式
  5. 华为使用网线通过浏览器登录AC6005的Web网管
  6. java十四章带参方法课后_java14带参的方法
  7. 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...
  8. Java 中 PO 与 VO 的区别
  9. 某同学使用计算机求30,概率论与数理统计习题集及答案
  10. 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...