在各种神经网络结构中,前面很多层(卷积、池化)可以看做是特征提取的过程,比如提取图像的各种纹理、颜色、线条等等。最后几层(全连接层),一般将提取好的特征进行压缩,用于分类。
训练大型网络,需要很好的设备,也需要很长的时间。迁移学习,就是将一个问题上训练好的模型参数,通过简单的调整使其适用于一个新的问题,一般保留前面N层(瓶颈层)的参数,重新训练最后的全连接层,这样做,可以节省大量时间,得到的效果也不赖。
以下代码,利用Google的Inception-v3模型,对花数据集进行分类。
数据集下载地址
Inception v3模型下载地址
花数据集有以下几个目录,每个目录就是一个种类的花:
import glob
import os.path
import random
import numpy as np
import tensorflow as tf
from tensorflow.python.platform import gfile
BOTTLENECK_TENSOR_SIZE=2048
BOTTLENECK_TENSOR_NAME='pool_3/_reshape:0'
JPEG_DATA_TENSOR_NAME='DecodeJpeg/contents:0'
MODEL_DIR='E:/程序/Jupyter/data'
MODEL_FILE='tensorflow_inception_graph.pb'
CACHE_DIR='E:/程序/Jupyter/data/tmp/bottleneck'
INPUT_DATA='E:/程序/Jupyter/data/flower_photos'
VALIDATION_PERCENTAGE=10
TEST_PERCENTAGE=10
LEARNING_RATE=0.01
STEPS=4000
BATCH=100
这个函数,用来把图片数据集随机分成训练集、验证集和测试集。
def create_image_lists(test_pct,val_pct):
result={}
sub_dirs=[x[0] for x in os.walk(INPUT_DATA)]
for sub_dir in sub_dirs[1:]:
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
label_name=dir_name.lower()
training_images=[]
testing_images=[]
validation_images=[]
for file_name in file_list:
base_name=os.path.basename(file
'相关知识
基于深度学习和迁移学习的识花实践
基于深度迁移学习的农业病害图像识别
使用迁移学习对花卉进行分类
TensorFlow学习记录(八)
机器学习(04)——常用专业术语2
如何翻译和解释机器学习术语?请看 Google 官方答案 下
深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow
应用卷积神经网络识别花卉及其病症
干货来袭,谷歌最新机器学习术语表
AI实战圣经《Machine Learning Yearning》第1
网址: tensorflow 迁移学习 transfer learning https://m.huajiangbk.com/newsview478101.html
上一篇: 种植凤仙花需要的工具和材料 |
下一篇: 树莓派实现自动浇花程序 |