Recientemente, estoy haciendo un proyecto de graduación, que implica el uso de contenido de red de pre-entrenamiento. Hay muchos recursos en línea en esta área, pero hay algunos problemas de código. Después de algunos intentos, esta persona blanca ha completado con éxito esta función. Biblioteca, para la instalación de la biblioteca de keras, simplemente use pip en todas las ventanas de la línea de comandos. ¡Envía mi código aquí y espero progresar junto con otros estudiantes! El código de Xiaobai es más escoria ...
# - * - codificación: utf-8 - * - "" " Creado el jueves 27 de diciembre 15:30:38 2018 @author: 13260 " "" "" " 功能 : 提取 VGG19 卷积 层 特征 并 保存 " "" # from keras.applications.resnet50 import ResNet50 from keras.applications.densenet import DenseNet201, preprocess_input from keras.preprocessing import image #from keras.applications.resnet50 import preprocess_input from keras.models import Model from sklearn.cluster import MiniBatchKMeans from keras.utils import from keras.utils plot_model from sklearn import preprocessing import numpy as np import os "" " Función: Leer todas las rutas de imagen Entrada: Ruta de base de datos Salida: Todas las rutas de imagen "" Ruta de def read_all_imgs (data_dir): catalogs = os.listdir (data_dir) imgSet = [] for i in range (len (catalogs)): catalog_path = data_dir + catalogs [i] for img in os.listdir (catalog_path): #imgs = [catalog_path + "/" + img para img en catalog_path] img_path = catalog_path + "/" + img imgSet.append (img_path) #print (len (imgSet)) print ("[INFO] Hay" + str (len ( imgSet)) + "imágenes ......") imgSet retorno "" " función: la capa de convolución correspondientes a la característica de imagen modelo extracción entradas: 1, modelo CNN 2, ruta de la imagen salidas: una característica de imagen correspondiente a " "" extract_conv_feature DEF (modelo, img_path ): img = image.load_img (img_path) x = image.img_to_array (img)forma [1] tmp_feature = []img_to_array (img) x = np.expand_dims (x, axis = 0) x = preprocess_input (x) conv_features = model.predict (x) #print ("[INFO] Feature was extracted!") return conv_features "" " Función: leer archivo de características de capa convolucional Entrada: ruta de salida del archivo de características: característica "" " def load_conv_feature (feature_path): conv_feature = np.load (feature_path) return conv_feature " "" Función: extraer la entrada de característica local del mapa de características de convolución : las características de capa convolucional de la imagen, formulario (muestras, filas, columnas, filtros) salida: una colección de vectores de características de convolución de imagen en la forma (filas * cols, filtros) "" " def flatten_conv_feature (conv_feature): num_c = conv_feature.shape [2] num_r = conv_feature.shape [1] para j en rango (num_r): para i en rango (num_c): tmp_feature.append (conv_feature [0, i, j ,:]. flatten ()) tmp_feature = np.array (tmp_feature) return tmp_feature "" " Función: extraer todas las características de capa de convolución de imagen (Expandir) Entrada: Ruta de imagen Salida: Características de capa de convolución de todas las imágenes "" " def get_all_local_feature (model, imgSet): all_feature = [] max_num = len (imgSet) para i in range (max_num): conv_feature = extract_conv_feature (model , imgSet [i]) si i% 500 == 0: print ("[INFO]" + str (i) + "images'conv_feature ha sido extraído!") #flatten_feature = flatten_conv_feature (conv_feature) flatten_feature = flatten_conv_feature (conv_feature) all_feature.append (flatten_feature) all_feature = np.matriz (all_feature) print ("[INFO] ¡Se ha extraído toda conv_feature!") return all_feature "" " 功能 : 提取 所有 图像 的 卷积 层 特征 (未 展开) " "" def get_no_flatten_feature (model, imgSet): all_feature = [] max_num = len (imgSet) para i in range (max_num): conv_feature = extract_conv_feature (model, imgSet [i]) if i% 500 == 0: print ("[INFO]" + str (i) + "images'conv_feature ha sido extraído! ") all_feature.append (conv_feature) all_feature = np.array (all_feature) print (" [INFO] All conv_feature ha sido extraído! ") return all_feature def save_feature (característica, ruta): np.save (ruta, función) print ("[INFO] ¡El archivo se ha guardado!") def main (): img_dir = "F: / shiyan / TensorFlow / retrain / data / train /" #Image data path imgSet = read_all_imgs (img_dir) # Si extrae convolución Para las características de capa, la propiedad include_top del modelo se establece en False, si se extrae la característica de capa completamente conectada, la propiedad include_top se establece en True # Load DenseNet201 modelo pre-entrenado, si necesita usar otro modelo, puede reemplazar directamente el modelo, otro código no necesita usar base_model = DenseNet201 (weights = 'imagenet', include_top = False) #base_model = ResNet50 (weights = 'imagenet', include_top = False) # Según el nombre de cada capa de la estructura de red keras, use get_layer (nombre de capa de red) directamente .output puede obtener el resultado de salida de la capa correspondiente # Si no conoce el nombre de la capa de red, puede usar model.summery () para imprimir cada capa del modelo. # model modelo. Modelo = Modelo (input = base_model. input, salidas = base_model.get_layer ('conv5_block32_concat'). salida) #model = Modelo (input = base_model.input, salidas = base_model.get_layer ('block5_conv3'). output) print ("[INFO] ¡El modelo se ha cargado!") "" "未 展开" "" all_conv_feature = get_no_flatten_feature (model, imgSet) print (all_conv_feature.shape) path = "F: /python/features/DenseNet/DenseNet201_conv_feature.npy" save_feature (all_conv_feature, path) if __name__ == ": ___in_ )