使用深度神經網路識別衛星資料

2021-09-05 11:37:43 字數 4306 閱讀 2139

給定的資料在 「point_data.csv」檔案裡,這個資料總共包含了5個類別(由class_id來區分), 幷包括10個特徵。在這裡,我們需要搭建多層的神經網路,並利用這個網路來識別分類。

首先是匯入所有所需的library

# 匯入library

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

# todo 匯入跟keras相關的libraray

from keras.models import sequential

from keras.layers import dense, dropout

from keras.optimizers import sgd

# 以下是跟sklearn相關的庫

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import labelencoder,scale

from sklearn.metrics import f1_score, classification_report,confusion_matrix

1.匯入資料集
filename = 'point_data.csv'

dataset = pd.read_csv(filename)

2.資料預處理

首先使用labelencoder對label進行標準化處理

encoder = labelencoder()

# 定義標籤y和特徵x

y = dataset.iloc[:, 2:3].values

x = dataset.iloc[:, 3:13].values

# todo: 對y做乙個簡單的轉換(不然會在keras部分會出錯)

y = encoder.fit_transform(y)

分割訓練資料與測試資料

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=42)
使用preprocessing.scale函式對資料進行歸一化

x_train = scale(x_train)

x_test = scale(x_test)

3.定義深度神經網路模型

模型總共包含4層hidden layer, 第一層包括50個hidden units, 第二層包括50個hidden units, 第三層包括60個hidden units,

第四層包括40個hidden units. 並在第一層hidden layer和第二層hidden layer之間新增乙個dropout layer (rate=0.2),在第二層和第三層hidden layer之間新增dropout layer(rate=0.2), 第三層和第四層之間新增dropout layer(rate=0.1)。

input_shape = (10,)

output_shape = 5

# todo: 定義深度學習模型

model = sequential()

model.add(dense(10, input_shape=input_shape, activation='relu'))

model.add(dense(50, activation='relu'))

model.add(dropout(rate=0.2))

model.add(dense(50, activation='relu'))

model.add(dropout(rate=0.2))

model.add(dense(60, activation='relu'))

model.add(dropout(rate=0.1))

model.add(dense(40, activation='relu'))

model.add(dense(output_shape, activation='softmax'))

# 輸出模型描述

定義sgd優化器,學習率為0.01

sgd = sgd(lr=0.01, decay=1e-6, momentum=0.9, nesterov=true)
義模型的compile函式,設定loss為sparse_categorical_crossentropy, 利用上面定義的sgd優化器,利用準確率作為評估標準。

model.compile(loss='sparse_categorical_crossentropy',optimizer=sgd, metrics=['accuracy'])
4.訓練模型

設定epoch為100, batch_size為100,並把訓練資料中的15%作為validation data(驗證集), 把中間的結果都賦給history變數(後面做分析用)

history = model.fit(x_train, y_train, epochs=100,batch_size=100,validation_split=0.15)
可以看到隨著模型的不斷訓練,損失函式降低到接近0.06,auc準確率可以達到97.7%

5.驗證模型

我們可以畫乙個圖來表示準確率的變化情況(分別在訓練資料和測試資料)

也可以畫乙個圖來表示loss的變化情況(分別在訓練資料和測試資料)

在測試資料上做評估

y_pred = model.predict(x_test)

score = model.evaluate(x_test, y_test, batch_size=100, verbose=1)

print(score)

print("baseline error: %.2f%%" % (100-score[1]*100))

繪製混淆矩陣

# **結果

test_class = model.predict_classes(x_test)

# 繪製矩陣

輸出在測試集上的precision, recall, f1-score

深度神經網路

關於卷積神經網路cnn,網路和文獻中有非常多的資料,我在工作 研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需。如果讀者是初接觸cnn,建議可以先看一看 deep learning 深度學習 學習筆記整理系列 中關於cnn的介紹 1 是介紹我們常說的lenet為例,相信...

深度神經網路非常善於識別物體

神經網路的複雜關係推理,什麼是關係推理?考慮下面的影象。幾乎不可能不把它當作物件 球體,立方體等等。我們可以根據構成影象畫素值的數百萬個數字來考慮它。或者影象中所有邊緣的角度。或者考慮每個10x10畫素區域。相反,我們直觀地根據它們識別影象的物件和原因。嘗試回答以下問題 大球體剩下的棕色金屬物體剩下...

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...