ウェブサイト検索

Python で TensorFlow を使用してニューラル ネットワークを実装する


ニューラル ネットワークは、人工知能の分野で広く使用されている概念であり、人間の脳の構造に基づいています。ニューラル ネットワークは複数の層で動作します。最も単純なものは、現在の層の入力が前の層の出力である逐次モデルです。

ニューラル ネットワーク モデルを作成、トレーニング、テストするには、Python の Tensorflow などの深層学習フレームワークを使用できます。すべてのニューラル ネットワーク モデルは、データの取得、予測の作成、予測の比較、そして最後にターゲットに近づくように予測を変更するなど、いくつかの簡単なステップに基づいています。

アルゴリズム

  • ステップ 1 - Python の numpy ライブラリと pandas ライブラリをインポートし、csv ファイルをデータ フレームとして読み込みます。

  • ステップ 2 - tensorflow をインポートし、データをトレーニング セットと検証セットに分割します。

  • ステップ 3 - 両方のセットのデータを前処理してスケーリングします。

  • ステップ 4 - 両方のセットのデータを異なる特徴に分離します。

  • ステップ 5 -Keras モジュールを使用して線形ニューラル ネットワーク モデルを形成し、それに adam パラメーターと mae パラメーターを設定します。 adam はオプティマイザーとして機能するのに対し、mae は予測で機能することに注意してください。

  • ステップ 6 - 必要な数のエポックに対してデータセットをトレーニングします。ここでは 10 エポックだけを取り上げます。

  • ステップ 7 - 次に、予測関数を使用してモデルをテストします。ここでは、最初の 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 ベースのアプリケーションで大いに活用されています。