首先可以上官网下载inceptio-v3的包:
代码可以分为三种:
1.特征处理
import warnings warnings.filterwarnings("ignore") import tensorflow as tf import os os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' tf.compat.v1.logging.set_verbosity(40) import pickle import numpy as np from sklearn.model_selection import train_test_split def sep(label = '', cnt=32): print('-' * cnt, label, '-' * cnt, sep='') tf.random.set_random_seed(1) np.random.seed(1) VER = 'v7.0' FILE_NAME = os.path.basename(__file__) SAVE_DIR = os.path.join('_save', FILE_NAME, VER) SAVE_NAME = 'bottleneck.pickle' # Inception-v3模型瓶颈层的节点个数 BOTTLENECK_TENSOR_SIZE = 2048 # Inception-v3模型中代表瓶颈层结果的张量名称。 # 在谷歌提出的Inception-v3模型中,这个张量名称就是'pool_3/_reshape:0'。 # 在训练模型时,可以通过tensor.name来获取张量的名称。 BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0' # 图像输入张量所对应的名称。 JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0' # 下载的谷歌训练好的Inception-v3模型文件目录 MODEL_DIR = '../../Data2/Qian_data/inception_dec_2015' # 下载的谷歌训练好的Inception-v3模型文件名 MODEL_FILE = 'tensorflow_inception_graph.pb' # 因为一个训练数据会被使用多次,所以可以将原始图像通过Inception-v3模型计算得到的特征向量保存在文件中,免去重复的计算。 # 下面的变量定义了这些文件的存放地址。 CACHE_DIR = './bottleneck/' # 图片数据文件夹。 # 在这个文件夹中每一个子文件夹代表一个需要区分的类别,每个子文件夹中存放了对应类别的图片。 path = '../../Data2/Qian_data/flower_photos/' INPUT_DATA = path # 验证的数据百分比 VALIDATION_PERCENTAGE = 10 # 测试的数据百分比 TEST_PERCENTAGE = 10 # 定义神经网络的设置 LEARNING_RATE = 0.01 STEPS = 40 GROUP = 5 BATCH = 100 sep('load model') with open(os.path.join(MODEL_DIR, MODEL_FILE), 'rb') as f:#从pb文件中调用 graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) # 加载读取的Inception-v3模型,并返回数据输入所对应的张量以及计算瓶颈层结果所对应的张量。 # 通过名称和下标来得到相应的值 bottleneck_tensor, jpeg_data_tensor = tf.import_graph_def(graph_def, return_elements=[