国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

美國十大購物網站免費注冊個人網站不花錢

美國十大購物網站,免費注冊個人網站不花錢,找人做網站排名優(yōu)化,wordpress官方網站基于WIN10的64位系統演示 一、寫在前面 類激活映射(Class Activation Mapping,CAM)和梯度權重類激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM)是兩種可視化深度學習模型決策過程的技術…

基于WIN10的64位系統演示

一、寫在前面

類激活映射(Class Activation Mapping,CAM)和梯度權重類激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM)是兩種可視化深度學習模型決策過程的技術。他們都是為了理解模型的決策過程,特別是對于圖像分類任務,它們可以生成一種熱力圖,這種圖可以突出顯示模型在做出預測時關注的圖像區(qū)域。

CAM:CAM是一種可視化卷積神經網絡(Convolutional Neural Networks, CNN)決策依據的技術。對于圖像分類任務,它可以生成一種熱力圖,突出顯示模型在做出預測時關注的圖像區(qū)域。CAM需要模型在全局平均池化(Global Average Pooling, GAP)層和最終的全連接層(Fully Connected, FC)之間沒有其他隱藏層,這是其使用的限制。

Grad-CAM:Grad-CAM是為了克服CAM的限制而提出的一種方法,它使用的是類別得分關于特定層輸出的梯度信息。這種方法不僅可以應用于卷積層,還可以應用于任何層的輸出。因此,Grad-CAM可以用于多種類型的深度學習模型,包括圖像分類、圖像生成、強化學習等各種模型。這使得Grad-CAM在可視化模型決策過程方面更加靈活和強大。

這一期主要介紹Grad-CAM,用的模型是Mobilenet_v2,以為夠快!!

二、Grad-CAM可視化實戰(zhàn)

繼續(xù)使用胸片的數據集:肺結核病人和健康人的胸片的識別。其中,肺結核病人700張,健康人900張,分別存入單獨的文件夾中。

(a)Mobilenet_v2建模

######################################導入包###################################
from tensorflow import keras
import tensorflow as tf
from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropout, Activation, Reshape, Softmax, GlobalAveragePooling2D, BatchNormalization
from tensorflow.python.keras.layers.convolutional import Convolution2D, MaxPooling2D
from tensorflow.python.keras import Sequential
from tensorflow.python.keras import Model
from tensorflow.python.keras.optimizers import adam_v2
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator, image_dataset_from_directory
from tensorflow.python.keras.layers.preprocessing.image_preprocessing import RandomFlip, RandomRotation, RandomContrast, RandomZoom, RandomTranslation
import os,PIL,pathlib
import warnings
#設置GPU
gpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0] #如果有多個GPU,僅使用第0個GPUtf.config.experimental.set_memory_growth(gpu0, True) #設置GPU顯存用量按需使用tf.config.set_visible_devices([gpu0],"GPU")warnings.filterwarnings("ignore")             #忽略警告信息
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False    # 用來正常顯示負號################################導入數據集#####################################
#1.導入數據
data_dir = "./MTB"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*')))
print("圖片總數為:",image_count)batch_size = 32
img_height = 100
img_width  = 100train_ds = image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=12,image_size=(img_height, img_width),batch_size=batch_size)val_ds = image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=12,image_size=(img_height, img_width),batch_size=batch_size)class_names = train_ds.class_names
print(class_names)
print(train_ds)#2.檢查數據
for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break#3.配置數據
AUTOTUNE = tf.data.AUTOTUNEdef train_preprocessing(image,label):return (image/255.0,label)train_ds = (train_ds.cache().shuffle(800).map(train_preprocessing)    .prefetch(buffer_size=AUTOTUNE)
)val_ds = (val_ds.cache().map(train_preprocessing) .prefetch(buffer_size=AUTOTUNE)
)#4. 數據可視化
plt.figure(figsize=(10, 8))  # 圖形的寬為10高為5
plt.suptitle("數據展示")class_names = ["Tuberculosis","Normal"]for images, labels in train_ds.take(1):for i in range(15):plt.subplot(4, 5, i + 1)plt.xticks([])plt.yticks([])plt.grid(False)# 顯示圖片plt.imshow(images[i])# 顯示標簽plt.xlabel(class_names[labels[i]-1])plt.show()######################################數據增強函數################################data_augmentation = Sequential([RandomFlip("horizontal_and_vertical"),RandomRotation(0.2),RandomContrast(1.0),RandomZoom(0.5,0.2),RandomTranslation(0.3,0.5),
])def prepare(ds):ds = ds.map(lambda x, y: (data_augmentation(x, training=True), y), num_parallel_calls=AUTOTUNE)return ds
train_ds = prepare(train_ds)################################導入mobilenet_v2################################
#獲取預訓練模型對輸入的預處理方法
from tensorflow.python.keras.applications import mobilenet_v2
from tensorflow.python.keras import Input, regularizers
IMG_SIZE = (img_height, img_width, 3)# 創(chuàng)建輸入張量
inputs = Input(shape=IMG_SIZE)
# 定義基礎模型,并將 inputs 傳入
base_model = mobilenet_v2.MobileNetV2(input_tensor=inputs,include_top=False, weights='imagenet')#從基礎模型中獲取輸出
x = base_model.output
#全局池化
x = GlobalAveragePooling2D()(x)
#BatchNormalization
x = BatchNormalization()(x)
#Dropout
x = Dropout(0.8)(x)
#Dense
x = Dense(128, kernel_regularizer=regularizers.l2(0.1))(x)  # 全連接層減少到128,添加 L2 正則化
#BatchNormalization
x = BatchNormalization()(x)
#激活函數
x = Activation('relu')(x)
#輸出層
outputs = Dense(2, kernel_regularizer=regularizers.l2(0.1))(x)  # 添加 L2 正則化
#BatchNormalization
outputs = BatchNormalization()(outputs)
#激活函數
outputs = Activation('sigmoid')(outputs)
#整體封裝
model = Model(inputs, outputs)
#打印模型結構
print(model.summary())#############################編譯模型#########################################
#定義優(yōu)化器
from tensorflow.python.keras.optimizers import adam_v2, rmsprop_v2
optimizer = adam_v2.Adam()#編譯模型
model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy',metrics=['accuracy'])#訓練模型
from tensorflow.python.keras.callbacks import ModelCheckpoint, Callback, EarlyStopping, ReduceLROnPlateau, LearningRateSchedulerNO_EPOCHS = 50
PATIENCE  = 10
VERBOSE   = 1# 設置動態(tài)學習率
annealer = LearningRateScheduler(lambda x: 1e-5 * 0.99 ** (x+NO_EPOCHS))# 設置早停
earlystopper = EarlyStopping(monitor='loss', patience=PATIENCE, verbose=VERBOSE)# 
checkpointer = ModelCheckpoint('mtb_jet_best_model_mobilenetv3samll.h5',monitor='val_accuracy',verbose=VERBOSE,save_best_only=True,save_weights_only=True)train_model  = model.fit(train_ds,epochs=NO_EPOCHS,verbose=1,validation_data=val_ds,callbacks=[earlystopper, checkpointer, annealer])#保存模型
model.save('mtb_jet_best_model_mobilenet.h5')
print("The trained model has been saved.")

(b)Grad-CAM

import numpy as np
from PIL import Image, ImageOps
from tensorflow.python.keras.preprocessing import image
from tensorflow.python.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.python.keras.models import load_model
import tensorflow as tf
from tensorflow.python.keras import Model
import matplotlib.pyplot as plt# 你的模型路徑
model_path = 'mtb_jet_best_model_mobilenet.h5'# 你的圖像路徑
image_path = './MTB/Tuberculosis/Tuberculosis-666.png'# 加載你的模型
model = load_model(model_path)def grad_cam(img_path, cls, model, layer_name='block_7_project'):# 加載圖像并預處理img = image.load_img(img_path, target_size=(100, 100))x = image.img_to_array(img)x = np.expand_dims(x, axis=0)x = preprocess_input(x)# 獲取預測類別preds = model.predict(x)pred_class = np.argmax(preds[0])# 使用 GradientTape 計算 Grad-CAMwith tf.GradientTape() as tape:last_conv_layer = model.get_layer(layer_name)iterate = Model([model.inputs], [model.output, last_conv_layer.output])model_out, last_conv_layer = iterate(x)class_out = model_out[:, pred_class]# 得到的梯度grads = tape.gradient(class_out, last_conv_layer)pooled_grads = tf.reduce_mean(grads, axis=(0, 1, 2))# 我們把梯度在每個特征圖上進行平均heatmap = tf.reduce_mean(tf.multiply(pooled_grads, last_conv_layer), axis=-1)# 調整 heatmap 的形狀和數值范圍heatmap = tf.squeeze(heatmap)  # 去掉尺寸為1的維度heatmap = np.maximum(heatmap, 0)  # 去掉小于0的值max_heat = np.max(heatmap)if max_heat == 0:max_heat = 1e-10  # 防止除以0heatmap /= max_heat  # 歸一化到0-1之間heatmap = np.uint8(255 * heatmap)  # 轉換到0-255之間并轉為uint8類型# 加載原始圖像img = Image.open(img_path)# 將熱力圖轉換為 PIL 圖像并調整其尺寸heatmap = Image.fromarray(heatmap)heatmap = heatmap.resize((img.height, img.width))# 將單通道熱力圖轉換為彩色(RGB)圖像heatmap = ImageOps.colorize(heatmap, 'blue', 'red')# 將彩色熱力圖轉換為帶透明度的(RGBA)圖像heatmap = heatmap.convert('RGBA')heatmap_with_alpha = Image.new('RGBA', heatmap.size)for x in range(heatmap.width):for y in range(heatmap.height):r, g, b, a = heatmap.getpixel((x, y))heatmap_with_alpha.putpixel((x, y), (r, g, b, int(a * 0.5)))# 將原始圖像轉換為 RGBA 圖像img = img.convert('RGBA')# 疊加圖像overlay = Image.alpha_composite(img, heatmap_with_alpha)# 將疊加后的圖像轉換為numpy數組overlay = np.array(overlay)# 使用matplotlib顯示圖像plt.imshow(overlay)plt.axis('off')  # 不顯示坐標軸plt.show()print(pred_class)# 繪制熱力圖
grad_cam(image_path, 0, model)

這個代碼需要調整的參數就只有“l(fā)ayer_name”,也就是使用哪一層的信息來可視化。當然,首先我們得先知道每一層的名稱:

#查看 Keras 模型每一層的名稱
for layer in model.layers:print(layer.name)

輸出如下:

然后,用哪一層呢?

其實吧,選擇哪一層用于Grad-CAM的計算并沒有一條明確的規(guī)則,這完全取決于你的模型結構以及你的具體需求。

一般來說,Convolutional Neural Networks(CNN,卷積神經網絡)的前面幾層往往捕捉到的是圖像的低級特征,比如邊緣、色彩和紋理等,而后面的層則可以捕捉到更為高級的特征,比如物體的部分或者整體。所以,如果你想要看到模型在判斷圖像時,主要關注了圖像中的哪些部分或者物體,你可能需要選擇離輸出層更近一些的卷積層。

但是這也不是絕對的。在實際應用中,你可能需要嘗試不同的層,看看哪一層生成的Grad-CAM熱力圖最能滿足你的需求。

比如我試了試:'block_1_project':

?'block_7_project':

?'block_10_project':

?'block_2_add':

?綜上,似乎一切隨緣,太抽象了!!!

三、寫在最后

略~

四、數據

鏈接:https://pan.baidu.com/s/15vSVhz1rQBtqNkNp2GQyVw?pwd=x3jf

提取碼:x3jf

http://aloenet.com.cn/news/39458.html

相關文章:

  • 長安東莞網站設計百度掃一掃識別圖片在線
  • logo設計培訓寧波seo網絡推廣優(yōu)化價格
  • 網站網頁設計中怎么添加頁碼信息谷歌海外推廣
  • 網站方案策劃5118營銷大數據
  • wordpress屏蔽垃圾國外ip領碩網站seo優(yōu)化
  • 網站建設服務好公司排名google瀏覽器官網下載
  • 做公司網站計入什么會計科目seo用什么論壇引流
  • 網站實現seo基礎知識考試
  • 怎樣優(yōu)化網站排名靠前泰州百度關鍵詞優(yōu)化
  • 重慶市工程建設信息網2021優(yōu)化關鍵詞的公司
  • 哈爾濱地鐵愛建站seo查詢網站是什么
  • 企業(yè)網站優(yōu)化找哪家搜索排行
  • wordpress本地建站成人零基礎學電腦培訓班
  • 瀚欽科技網站建設谷歌搜索引擎免費
  • 北京建站設計寫一篇軟文1000字
  • 有沒有專門做航拍婚禮網站應用下載app排行榜
  • wordpress動漫博客模板東莞seo靠譜
  • 網頁制作基礎教程第二版seo查詢 站長之家
  • 信譽好的東莞網站建設網站收錄查詢代碼
  • 做網站制作的摘要網店推廣策劃書
  • 視頻鏈接生成網站國通快速建站
  • 什么類型的產品可以做網站出口贛州seo外包
  • 國內適合個人做外貿的網站有哪些app001推廣平臺官網
  • 寧夏干部網絡教育培訓學院小紅書seo排名優(yōu)化
  • 公司網站最新版今日剛剛發(fā)生新聞事件
  • 平面設計平臺接單win10最強性能優(yōu)化設置
  • 建設一個網站需要哪些材料合肥seo排名公司
  • 網站免費下載軟件游戲推廣怎么做
  • 門戶網站開發(fā)框架qq群怎么優(yōu)化排名靠前
  • 用bootstrap做網站管理系統優(yōu)秀網站設計賞析