首页 > 文章列表 > 使用Python中的TensorFlow实现神经网络

使用Python中的TensorFlow实现神经网络

Python TensorFlow 神经网络
314 2023-09-06

神经网络是人工智能领域广泛使用的概念,基于人脑的结构。神经网络分层工作,最简单的是顺序模型,其中当前层的输入是前一层的输出。

为了创建、训练和测试神经网络模型,我们可以使用深度学习框架,例如 Python 中的 Tensorflow。每个神经网络模型都基于几个简单的步骤,例如获取数据、进行预测、比较预测,最后改变它们以更接近目标。

算法

  • 第 1 步 - 导入 Python 的 numpy 和 pandas 库并将 csv 文件作为数据框加载。

  • 第 2 步 - 导入张量流并将数据拆分为训练集和验证集。

  • 步骤 3 - 对两组数据进行预处理和缩放。

  • 步骤 4 - 将两个集合的数据分成不同的特征。

  • 步骤 5 - 使用 Keras 模块形成线性神经网络模型并为其设置 adam 和 mae 参数。请注意,adam 用作优化器,而 mae 用作预测。

  • 第 6 步 - 根据需要训练数据集的次数。这里我们只采用 10 个 epoch。

  • 第 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

结论

众所周知,神经网络可以相当轻松地处理大量数据,同时提供高计算能力和并行处理能力。然而,与传统方法相比,实施神经网络仍然有点昂贵。尽管如此,它们在基于人工智能的应用中发现了很大的用途,例如图像识别、面部识别或股市预测等。