TensorFlow实践5:图像识别与卷积神经网络(二)
【本章不做重点,并未实践,内容仅作参考】
内容摘要:
- Inception-v3模型
- TensorFlow实现迁移学习
5.1 Inception-v3模型
此模型中Incepton结构是将不同的卷积层通过并联的方式结合在一起的。
Inception模块会首先使用不同尺寸的过滤器处理输入数据。虽然过滤器的大小不一致,但是采用全0填充,所最后可以正常拼接。此模块不深入学习。其它介绍可以查看参考文献部分的两篇文档,介绍非常详细。
注:运行时自行从google下载inception_v3.ckpt文件。
TensorFlow的github代码库上可以找到完整的Inception-v3模型源码:
https://github.com/tensorflow/models/blob/master/research/slim/nets/incption_v3.py
5.2 TensorFlow实现迁移学习
下面给出下载数据集的代码位置:
wget http://download.tensorflow.org/example_images/glower_photes.tgz
tar xzf flower_photos.tgz
解压后文件夹有5个子文件夹,每一个子文件夹的名称为一种花的名称,代表不同类别。平均每一种花有734章图片,每一张图片都有RGB色彩模式的,大小不同。
代码:
第一部分:数据处理部分
import glob
import os.path
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile
# 原始输入数据的目录,这个目录下有5个子目录,每个子目录底下保存这属于该
# 类别的所有图片。
INPUT_DATA = \'../../datasets/flower_photos\'
# 输出文件地址。我们将整理后的图片数据通过numpy的格式保存。
OUTPUT_FILE = \'../../datasets/flower_processed_data.npy\'
# 测试数据和验证数据比例。
VALIDATION_PERCENTAGE = 10
TEST_PERCENTAGE = 10
# 读取数据并将数据分割成训练数据、验证数据和测试数据。
def create_image_lists(sess, testing_percentage, validation_percentage):
sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
is_root_dir = True
# 初始化各个数据集。
training_images = []
training_labels = []
testing_images = []
testing_labels = []
validation_images = []
validation_labels = []
current_label = 0
# 读取所有的子目录。
for sub_dir in sub_dirs:
if is_root_dir:
is_root_dir = False
continue
# 获取一个子目录中所有的图片文件。
extensions = [\'jpg\', \'jpeg\', \'JPG\', \'JPEG\']
file_list = []
dir_name = os.path.basename(sub_dir)
for extension in extensions:
file_glob = os.path.join(INPUT_DATA, dir_name, \'*.\' + extension)
file_list.extend(glob.glob(file_glob))
if not file_list: continue
print("processing:", dir_name)
i = 0
# 处理图片数据。
for file_name in file_list:
i += 1
# 读取并解析图片,将图片转化为299*299以方便inception-v3模型来处理。
image_raw_data = gfile.FastGFile(file_name, \'rb\').read()
image = tf.image.decode_jpeg(image_raw_data)
if image.dtype != tf.float32:
image = tf.image.convert_image_dtype(image, dtype=tf.float32)
image = tf.image.resize_images(image, [299, 299])
image_value =