深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13
生活随笔
收集整理的這篇文章主要介紹了
深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pathlib
數據讀取及預處理
data_dir = "./2_class"# 文件路徑 data_root = pathlib.Path(data_dir)# 構建路徑對象 for item in data_root.iterdir(): # 對目錄進行迭代查看文件路徑及對象print(item) all_image_path = list(data_root.glob("*/*"))#使用glob方法及正則表達式提取目錄里面所有文件 len(all_image_path) # 1400個數據 all_image_path[:3]# 通過切片查看前3個文件 all_image_path = [str(path) for path in all_image_path]# 使用str把路徑變成一個實際的路徑 all_image_path[10:12] import random random.shuffle(all_image_path)# 把內容亂序 all_image_path[10:12] image_count = len(all_image_path) image_count # 記錄圖片的張數 label_names = sorted (item.name for item in data_root.glob("*/")) # 提取分類名字 label_names # 編碼airplane對應0, lake對應1 label_to_index = dict((name,index) for index,name in enumerate(label_names)) label_to_index all_image_path[:3] pathlib.Path("2_class\\lake\\lake_405.jpg").parent.name all_image_label = [label_to_index[pathlib.Path(p).parent.name]for p in all_image_path] all_image_label[:5] all_image_path[:5] import IPython.display as display index_to_label = dict((v,k) for k,v in label_to_index.items()) index_to_label讀取和解碼圖片
for n in range(3):image_index = random.choice(range(len(all_image_path)))display.display(display.Image(all_image_path[image_index]))print(index_to_label[all_image_label[image_index]])print() # 對單張圖片進行處理過程 # 使用tf讀取圖片 img_path = all_image_path[0] img_path img_raw = tf.io.read_file(img_path) img_raw # 二進制的圖片 # 解碼圖片 img_tensor = tf.image.decode_image(img_raw) img_tensor.shape img_tensor img_tensor = tf.cast(img_tensor,tf.float32)# 轉換數據類型為float32 img_tensor # 標準化 img_tensor = img_tensor/255定義函數對圖片進行處理
# 定義函數對圖片進行處理 def load_preprosess_image(img_paht):img_raw = tf.io.read_file(img_path) # 讀取圖片的路徑img_tensor = tf.image.decode_jpeg(img_raw,channels=3)# 解碼圖片channels=3代表彩色圖片img_tensor = tf.image.resize(img_tensor,[256,256]) #定義圖片大小img_tensor = tf.cast(img_tensor,tf.float32) # 轉化圖片類型img = img_tensor/255 # 標準化return img使用tf.data 構建圖片輸入管道
# 構造tf.data對所有圖片進行處理 path_ds = tf.data.Dataset.from_tensor_slices(all_image_path) image_dataset = path_ds.map(load_preprosess_image)# 使用上面定義好的圖片處理函數處理all_image_path中所有的圖片 label_dataset = tf.data.Dataset.from_tensor_slices(all_image_label)
建立模型
# 增加BN層 #建立模型 model = tf.keras.Sequential() # 順序模型 model.add(tf.keras.layers.Conv2D(64,(3,3),input_shape=(256,256,3)))# 添加一個卷積層 model.add(tf.keras.layers.BatchNormalization()) # 批標準化 model.add(tf.keras.layers.Activation("relu")) # 激活層model.add(tf.keras.layers.Conv2D(64,(3,3))) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.MaxPooling2D()) model.add(tf.keras.layers.Conv2D(128,(3,3))) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.MaxPooling2D()) model.add(tf.keras.layers.Conv2D(256,(3,3))) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.MaxPooling2D()) model.add(tf.keras.layers.Conv2D(512,(3,3))) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.MaxPooling2D()) model.add(tf.keras.layers.Conv2D(1024,(3,3))) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.GlobalAveragePooling2D()) # 全局池化 model.add(tf.keras.layers.Dense(1024)) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.Dense(256)) model.add(tf.keras.layers.BatchNormalization()) model.add(tf.keras.layers.Activation("relu"))model.add(tf.keras.layers.Dense(1,activation="sigmoid"))#二分類使用sigmoid激活 model.summary() # 編譯模型 model.compile(optimizer="adam",loss="binary_crossentropy",metrics=["acc"]) steps_per_epoch = train_count//BATCH_SIZE validation_steps = test_count//BATCH_SIZE # 步數 # 訓練模型 history = model.fit(train_dataset,epochs=30,steps_per_epoch=steps_per_epoch,validation_data=test_dataset,validation_steps=validation_steps)總結
以上是生活随笔為你收集整理的深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习-Tensorflow2.2-卷
- 下一篇: 深度学习-Tensorflow2.2-批