使用 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 的應用中得到了廣泛應用,例如影像識別、人臉識別或股票市場預測等等。