圆月山庄资源网 Design By www.vgjia.com
keras模型可视化:
model: model = Sequential() # input: 100x100 images with 3 channels -> (100, 100, 3) tensors. # this applies 32 convolution filters of size 3x3 each. 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: 100x100 images with 3 channels -> (100, 100, 3) tensors. # this applies 32 convolution filters of size 3x3 each. 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)) for i in range(32): plt.subplot(4,8,i+1) plt.imshow(re[0][i]) #, cmap='gray' plt.show() ################################################################## model_v2 = Sequential() # input: 100x100 images with 3 channels -> (100, 100, 3) tensors. # this applies 32 convolution filters of size 3x3 each. 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)) for i in range(64): plt.subplot(8,8,i+1) plt.imshow(re2[0][i]) #, cmap='gray' plt.show() ################################################################## model_v3 = Sequential() # input: 100x100 images with 3 channels -> (100, 100, 3) tensors. # this applies 32 convolution filters of size 3x3 each. 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)) for i in range(121): plt.subplot(11,11,i+1) plt.imshow(re3[0][i]) #, cmap='gray' plt.show()
2.kernel可视化:
def process(x): res = np.clip(x, 0, 1) return res def dprocessed(x): res = np.zeros_like(x) res += 1 res[x < 0] = 0 res[x > 1] = 0 return res def deprocess_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') return x for i_kernal in range(64): input_img=model.input loss = K.mean(model.layers[5].output[:, :,:,i_kernal]) # loss = K.mean(model.output[:, i_kernal]) # compute the gradient of the input picture wrt this loss grads = K.gradients(loss, input_img)[0] # normalization trick: we normalize the gradient grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5) # this function returns the loss and grads given the input picture iterate = K.function([input_img, K.learning_phase()], [loss, grads]) # we start from a gray image with some noise 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 # run gradient ascent print('####################################',i_kernal+1) loss_value_pre=0 for i in range(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]) if i%1000 == 0: # print(' predictions: ' , np.shape(predictions), np.argmax(predictions)) print('Iteration %d/%d, loss: %f' % (i, 10000, loss_value)) print('Mean grad: %f' % np.mean(grads_value)) if all(np.abs(grads_val) < 0.000001 for grads_val in grads_value.flatten()): failed = True print('Failed') break # print('Image:\n%s' % str(input_img_data[0,0,:,:])) if loss_value_pre != 0 and loss_value_pre > loss_value: break if loss_value_pre == 0: loss_value_pre = loss_value # if loss_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可视化实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
标签:
keras,kernel,可视化
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月03日
2024年11月03日
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]