| 这篇教程TensorFlow-抽取模型某一层特征 keras输出中间层结果的2种方法写得很实用,希望能帮到您。 
 TensorFlow-抽取模型某一层特征   原文链接深度学习具有强大的特征表达能力。有时候我们训练好分类模型,并不想用来进行分类,而是用来提取特征用于其他任务,比如相似图片计算。接下来讲下如何使用TensorFlow提取特征。 1.必须在模型中命名好要提取的那一层,如下 
self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total], name='h_pool_flat')			
 2.通过调用sess.run()来获取h_pool_flat层特征 
  
	feature = graph.get_operation_by_name("h_pool_flat").outputs[0]batch_predictions, batch_feature = \sess.run([predictions, feature], {input_x: x_test_batch, dropout_keep_prob: 1.0})    keras输出中间层结果的2种方法  原文链接1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. 
  
	#coding=utf-8import seaborn as sbnimport pylab as pltimport theanofrom keras.models import Sequentialfrom keras.layers import Dense,Activation  from keras.models import Model model = Sequential()model.add(Dense(32, activation='relu', input_dim=100))model.add(Dense(16, activation='relu',name="Dense_1"))model.add(Dense(1, activation='sigmoid',name="Dense_2"))model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy']) # Generate dummy dataimport numpy as np#假设训练和测试使用同一组数据data = np.random.random((1000, 100))labels = np.random.randint(2, size=(1000, 1)) # Train the model, iterating on the data in batches of 32 samplesmodel.fit(data, labels, epochs=10, batch_size=32)#已有的model在load权重过后#取某一层的输出为输出新建为model,采用函数模型dense1_layer_model = Model(inputs=model.input,outputs=model.get_layer('Dense_1').output)#以这个model的预测值作为输出dense1_output = dense1_layer_model.predict(data) print dense1_output.shapeprint dense1_output[0] 2.因为我的后端是使用的theano,所以还可以考虑使用theano的函数: 
  
	#这是一个theano的函数dense1 = theano.function([model.layers[0].input],model.layers[1].output,allow_input_downcast=True)dense1_output = dense1(data) #visualize these images's FC-layer featureprint dense1_output[0]   深度学习优化函数详解 Nesterov accelerated gradient (NAG)
 获取Pytorch中间某一层权重或者特征
 |