keras模型可视化,层可视化及kernel可视化实例
keras模型可视化:
model: model=Sequential() #input:100x100imageswith3channels->(100,100,3)tensors. #thisapplies32convolutionfiltersofsize3x3each. model.add(ZeroPadding2D((1,1),input_shape=(38,38,1))) model.add(Conv2D(32,(3,3),activation='relu',padding='same')) #model.add(Conv2D(32,(3,3),activation='relu',padding='same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(64,(3,3),activation='relu',padding='same',)) #model.add(Conv2D(64,(3,3),activation='relu',padding='same',)) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(128,(3,3),activation='relu',padding='same',)) #model.add(Conv2D(128,(3,3),activation='relu',padding='same',)) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(AveragePooling2D((5,5))) model.add(Flatten()) #model.add(Dense(512,activation='relu')) #model.add(Dropout(0.5)) model.add(Dense(label_size,activation='softmax'))
1.层可视化:
test_x=[] img_src=cv2.imdecode(np.fromfile(r'c:\temp.tif',dtype=np.uint8),cv2.IMREAD_GRAYSCALE) img=cv2.resize(img_src,(38,38),interpolation=cv2.INTER_CUBIC) #img=np.random.randint(0,255,(38,38)) img=(255-img)/255 img=np.reshape(img,(38,38,1)) test_x.append(img) ################################################################### layer=model.layers[1] weight=layer.get_weights() #print(weight) print(np.asarray(weight).shape) model_v1=Sequential() #input:100x100imageswith3channels->(100,100,3)tensors. #thisapplies32convolutionfiltersofsize3x3each. model_v1.add(ZeroPadding2D((1,1),input_shape=(38,38,1))) model_v1.add(Conv2D(32,(3,3),activation='relu',padding='same')) #model.add(Conv2D(32,(3,3),activation='relu',padding='same')) model_v1.layers[1].set_weights(weight) re=model_v1.predict(np.array(test_x)) print(np.shape(re)) re=np.transpose(re,(0,3,1,2)) foriinrange(32): plt.subplot(4,8,i+1) plt.imshow(re[0][i])#,cmap='gray' plt.show() ################################################################## model_v2=Sequential() #input:100x100imageswith3channels->(100,100,3)tensors. #thisapplies32convolutionfiltersofsize3x3each. model_v2.add(ZeroPadding2D((1,1),input_shape=(38,38,1))) model_v2.add(Conv2D(32,(3,3),activation='relu',padding='same')) #model.add(Conv2D(32,(3,3),activation='relu',padding='same')) model_v2.add(BatchNormalization()) model_v2.add(MaxPooling2D(pool_size=(2,2))) model_v2.add(Dropout(0.25)) model_v2.add(Conv2D(64,(3,3),activation='relu',padding='same',)) print(len(model_v2.layers)) layer1=model.layers[1] weight1=layer1.get_weights() model_v2.layers[1].set_weights(weight1) layer5=model.layers[5] weight5=layer5.get_weights() model_v2.layers[5].set_weights(weight5) re2=model_v2.predict(np.array(test_x)) re2=np.transpose(re2,(0,3,1,2)) foriinrange(64): plt.subplot(8,8,i+1) plt.imshow(re2[0][i])#,cmap='gray' plt.show() ################################################################## model_v3=Sequential() #input:100x100imageswith3channels->(100,100,3)tensors. #thisapplies32convolutionfiltersofsize3x3each. model_v3.add(ZeroPadding2D((1,1),input_shape=(38,38,1))) model_v3.add(Conv2D(32,(3,3),activation='relu',padding='same')) #model.add(Conv2D(32,(3,3),activation='relu',padding='same')) model_v3.add(BatchNormalization()) model_v3.add(MaxPooling2D(pool_size=(2,2))) model_v3.add(Dropout(0.25)) model_v3.add(Conv2D(64,(3,3),activation='relu',padding='same',)) #model.add(Conv2D(64,(3,3),activation='relu',padding='same',)) model_v3.add(BatchNormalization()) model_v3.add(MaxPooling2D(pool_size=(2,2))) model_v3.add(Dropout(0.25)) model_v3.add(Conv2D(128,(3,3),activation='relu',padding='same',)) print(len(model_v3.layers)) layer1=model.layers[1] weight1=layer1.get_weights() model_v3.layers[1].set_weights(weight1) layer5=model.layers[5] weight5=layer5.get_weights() model_v3.layers[5].set_weights(weight5) layer9=model.layers[9] weight9=layer9.get_weights() model_v3.layers[9].set_weights(weight9) re3=model_v3.predict(np.array(test_x)) re3=np.transpose(re3,(0,3,1,2)) foriinrange(121): plt.subplot(11,11,i+1) plt.imshow(re3[0][i])#,cmap='gray' plt.show()
2.kernel可视化:
defprocess(x):
res=np.clip(x,0,1)
returnres
defdprocessed(x):
res=np.zeros_like(x)
res+=1
res[x<0]=0
res[x>1]=0
returnres
defdeprocess_image(x):
x-=x.mean()
x/=(x.std()+1e-5)
x*=0.1
x+=0.5
x=np.clip(x,0,1)
x*=255
x=np.clip(x,0,255).astype('uint8')
returnx
fori_kernalinrange(64):
input_img=model.input
loss=K.mean(model.layers[5].output[:,:,:,i_kernal])
#loss=K.mean(model.output[:,i_kernal])
#computethegradientoftheinputpicturewrtthisloss
grads=K.gradients(loss,input_img)[0]
#normalizationtrick:wenormalizethegradient
grads/=(K.sqrt(K.mean(K.square(grads)))+1e-5)
#thisfunctionreturnsthelossandgradsgiventheinputpicture
iterate=K.function([input_img,K.learning_phase()],[loss,grads])
#westartfromagrayimagewithsomenoise
np.random.seed(0)
num_channels=1
img_height=img_width=38
input_img_data=(255-np.random.randint(0,255,(1,img_height,img_width,num_channels)))/255.
failed=False
#rungradientascent
print('####################################',i_kernal+1)
loss_value_pre=0
foriinrange(10000):
#processed=process(input_img_data)
#predictions=model.predict(input_img_data)
loss_value,grads_value=iterate([input_img_data,1])
#grads_value*=dprocessed(input_img_data[0])
ifi%1000==0:
#print('predictions:',np.shape(predictions),np.argmax(predictions))
print('Iteration%d/%d,loss:%f'%(i,10000,loss_value))
print('Meangrad:%f'%np.mean(grads_value))
ifall(np.abs(grads_val)<0.000001forgrads_valingrads_value.flatten()):
failed=True
print('Failed')
break
#print('Image:\n%s'%str(input_img_data[0,0,:,:]))
ifloss_value_pre!=0andloss_value_pre>loss_value:
break
ifloss_value_pre==0:
loss_value_pre=loss_value
#ifloss_value>0.99:
#break
input_img_data+=grads_value*1#e-3
plt.subplot(8,8,i_kernal+1)
#plt.imshow((process(input_img_data[0,:,:,0])*255).astype('uint8'),cmap='Greys')#cmap='Greys'
img_re=deprocess_image(input_img_data[0])
img_re=np.reshape(img_re,(38,38))
plt.imshow(img_re,cmap='Greys')#cmap='Greys'
#plt.show()
plt.show()
model.layers[1]
model.layers[5]
model.layers[-1]
以上这篇keras模型可视化,层可视化及kernel可视化实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。