一个简单的栗子实现特征图可视化
# coding: utf-8 from keras.models import Model import cv2 import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers.convolutional import Convolution2D, MaxPooling2D from keras.layers import Activation from pylab import * import keras def get_row_col(num_pic): squr = num_pic ** 0.5 row = round(squr) col = row + 1 if squr - row > 0 else row return row, col def visualize_feature_map(img_batch): feature_map = np.squeeze(img_batch, axis=0) print(feature_map.shape) feature_map_combination = [] plt.figure() num_pic = feature_map.shape[2] row, col = get_row_col(num_pic) for i in range(0, num_pic): feature_map_split = feature_map[:, :, i] feature_map_combination.append(feature_map_split) plt.subplot(row, col, i + 1) plt.imshow(feature_map_split) axis('off') title('feature_map_{}'.format(i)) plt.savefig('feature_map.png') plt.show() feature_map_sum = sum(ele for ele in feature_map_combination) plt.imshow(feature_map_sum) plt.savefig("feature_map_sum.png") def create_model(): model = Sequential() model.add(Convolution2D(9, 5, 5, input_shape=img.shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(4, 4))) model.add(Convolution2D(9, 5, 5, input_shape=img.shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(3, 3))) model.add(Convolution2D(9, 5, 5, input_shape=img.shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(9, 3, 3, input_shape=img.shape)) model.add(Activation('relu')) return model if __name__ == "__main__": img = cv2.imread('001.jpg') model = create_model() img_batch = np.expand_dims(img, axis=0) conv_img = model.predict(img_batch) visualize_feature_map(conv_img)
原始图像每一层的feature map
feature map 求和
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)