前面我們使用了第一個模型,它是一個前饋神經網絡(Feedforward Neural Network,FNN)
。FNN是一種神經網絡架構,它以一種前向傳播的方式工作,沒有循環或回饋的結構。在FNN中,每一層的神經元只與下一層相連,信息只會在前向方向傳播。這種結構使得FNN在建模和理解上相對簡單,因此適合初學者入門。
然而大多數的應用中,通常會使用更複雜的神經網絡架構,而不僅僅是FNN,因此接下來我們將學習更廣泛使用的基礎模型結構,包括DNN(深度神經網絡)
、CNN(卷積神經網絡)
、RNN(循環神經網絡)等等
,這些模型具有更強大的能力,可應用於各種不同的任務。我們將從DNN開始,為我們打開更多深度學習的大門
DNN之所以被稱為深度,是因為它包含多個隱藏層,使得網絡結構非常深,這種深度結構使DNN能夠學習從輸入到輸出之間的複雜映射關係,並且能夠自動提取數據的特徵。
圖片來源:https://www.datacamp.com/tutorial/introduction-to-deep-neural-networks
它在各種任務中都有不錯的表現,如圖像識別、語音識別、自然語言處理、數據分析等,而DNN還有一個關鍵優勢是它的通用性,它可以用於各種不同的領域和問題,只需適當調整網絡結構和訓練過程即可,並且DNN還可以與其他神經網絡結構結合,以解決更複雜的問題。
會發現其實DNN與FNN有點像,但還是有區別的,如下
DNN(深度神經網路)具有多層深度結構,適用於複雜的深度學習任務,如圖像和語音識別。
FNN(前饋神經網路)是簡單的全連接網路,用於傳統機器學習問題。
兩者構造差異在層數和連接方式。
那麼下面一樣讓我們來做實際操作
我們一樣以mnist手寫數字作為數據集
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28)) # 展平成一維數組
test_images = test_images.reshape((10000, 28 * 28))
train_images = train_images.astype('float32') / 255 # 正規化像素值
test_images = test_images.astype('float32') / 255
model = Sequential()
model.add(Dense(128, input_shape=(28 * 28,), activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
# 訓練模型
history = model.fit(train_images, train_labels, epochs=10, batch_size=64, validation_data=(test_images, test_labels)) # 使用 validation_data 同時驗證損失
# 建立 LOSS 圖表
#train loss
plt.plot(history.history['loss'])
#test loss
plt.plot(history.history['val_loss'])
#標題
plt.title('Model loss')
#y軸標籤
plt.ylabel('Loss')
#x軸標籤
plt.xlabel('Epoch')
#顯示折線的名稱
plt.legend(['Train', 'Test'], loc='upper left')
#顯示折線圖
plt.show()
# 評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
以上就是DNN的介紹與模型,明天則開始介紹CNN與實際建立一個CNN模型,希望今天的內容能夠幫上忙,明天見。