使用 TensorFlow 在 Python 中實現神經網路


神經網路是人工智慧領域中廣泛使用的概念,其靈感來源於人腦的結構。神經網路分層工作,最簡單的形式是順序模型,其中當前層的輸入是前一層輸出的結果。

為了建立、訓練和測試神經網路模型,我們可以使用 Python 中的深度學習框架,如 Tensorflow。每個神經網路模型都基於一些簡單的步驟,例如獲取資料、做出預測、比較預測結果,最後調整預測結果以使其更接近目標。

演算法

  • 步驟 1 − 匯入 Python 的 numpy 和 pandas 庫,並將 csv 檔案載入為資料框。

  • 步驟 2 − 匯入 tensorflow 並將資料分成訓練集和驗證集。

  • 步驟 3 − 對兩個資料集的資料進行預處理和縮放。

  • 步驟 4 − 將兩個資料集的資料分成不同的特徵。

  • 步驟 5 − 使用 Keras 模組構建線性神經網路模型,併為其設定 adam 和 mae 引數。請注意,adam 充當最佳化器,而 mae 則用於預測。

  • 步驟 6 − 根據需要訓練資料集的輪次。這裡我們只進行 10 輪訓練。

  • 步驟 7 − 現在使用 predict 函式測試我們的模型。這裡我們傳遞前 4 行作為輸入以生成結果。

  • 步驟 8 − 將結果與目標值進行比較。如果預測值足夠接近實際值,那麼我們可以得出結論,模型工作正常。

示例

在這個示例中,我們將從 kaggle 獲取糖尿病資料集,併為其實現一個神經網路。雖然我們也可以建立多層神經網路模型,但為了簡單起見,這裡我們將限制為線性網路。

#step 1 - import numpy and pandas and load the dataset
import numpy as np
import pandas as pd
df = pd.read_csv('dataset.csv')
df.head()

#step 2 - import tensorflow and split the data into training and validation sets 
import tensorflow as tf
train_df = df.sample(frac=0.85, random_state=4)
val_df = df.drop(train_df.index)

#step 3 - scale and preprocess the data
max_val = train_df.max(axis= 0)
min_val = train_df.min(axis= 0)
range = max_val - min_val
train_df = (train_df - min_val)/(range)
val_df =  (val_df- min_val)/range

#step 4 - separate the data into features
X_train = train_df.drop('gravity',axis=1)
X_val = val_df.drop('gravity',axis=1)
y_train = train_df['gravity']
y_val = val_df['gravity']
input_shape = [X_train.shape[1]]
input_shape

#step 5 - make a linear neural network model and add parameters
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=1,input_shape=input_shape)])
model.summary()
model.compile(optimizer='adam',
              loss='mae') 

#step 6 - train the dataset for epochs
losses = model.fit(X_train, y_train,
 
            validation_data=(X_val, y_val),
            batch_size=256,
            epochs=10,  
 
         )

#step 7 - use the predict function to test the model 
model.predict(X_val.iloc[0:4, :])

#step 8 - compare the result with the target value 
y_val.iloc[0:4]

我們將資料分成訓練集和驗證集,並透過計算訓練集中最大值和最小值來預處理資料,並將資料歸一化到 0 到 1 之間。我們進一步將資料分成特徵,並根據特徵數量定義輸入形狀。

然後,我們建立一個線性神經網路模型,並新增一個具有 1 個節點(表示輸出)的層,以及之前定義的輸入形狀。我們編譯和訓練模型,並從訓練好的模型中獲取前 4 行資料的預測結果。然後,我們將預測值與實際值進行比較,以評估模型的效能。

輸出

Model: "sequential_1"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_1 (Dense)             (None, 1)                 8         
                                                                 
=================================================================
Total params: 8
Trainable params: 8
Non-trainable params: 0

_________________________________________________________________
Epoch 1/10
1/1 [==============================] - 1s 944ms/step - loss: 0.8678 - val_loss: 1.0600
Epoch 2/10
1/1 [==============================] - 0s 71ms/step - loss: 0.8639 - val_loss: 1.0556
Epoch 3/10
1/1 [==============================] - 0s 63ms/step - loss: 0.8600 - val_loss: 1.0511
Epoch 4/10
1/1 [==============================] - 0s 66ms/step - loss: 0.8561 - val_loss: 1.0467
Epoch 5/10
1/1 [==============================] - 0s 65ms/step - loss: 0.8522 - val_loss: 1.0422
Epoch 6/10
1/1 [==============================] - 0s 66ms/step - loss: 0.8483 - val_loss: 1.0378
Epoch 7/10
1/1 [==============================] - 0s 74ms/step - loss: 0.8444 - val_loss: 1.0334
Epoch 8/10
1/1 [==============================] - 0s 71ms/step - loss: 0.8405 - val_loss: 1.0289
Epoch 9/10
1/1 [==============================] - 0s 74ms/step - loss: 0.8366 - val_loss: 1.0245
Epoch 10/10
1/1 [==============================] - 0s 68ms/step - loss: 0.8327 - val_loss: 1.0200
1/1 [==============================] - 0s 84ms/step

1     0.413793
9     0.551724
36    0.103448
44    0.517241
Name: gravity, dtype: float64

結論

神經網路能夠輕鬆處理海量資料,並提供強大的計算能力和並行處理能力。然而,與傳統方法相比,實現神經網路仍然比較昂貴。儘管如此,它們在基於 AI 的應用中得到了廣泛應用,例如影像識別、人臉識別或股票市場預測等等。

更新時間: 2023年8月7日

142 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告