使用 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 获取糖尿病数据集并为其实现神经网络。虽然我们也可以创建一个多层神经网络模型,但为了简单起见,我们在这里将限制为线性网络。
#步骤 1 - 导入 numpy 和 pandas 并加载数据集 import numpy as np import pandas as pd df = pd.read_csv('dataset.csv') df.head() #步骤 2 - 导入 tensorflow 并将数据拆分为训练集和验证集 import tensorflow as tf train_df = df.sample(frac=0.85, random_state=4) val_df = df.drop(train_df.index) #步骤 3 - 缩放和预处理数据 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 #步骤 4 - 将数据分成特征 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 #步骤 5 - 制作线性神经网络模型并添加参数 model = tf.keras.Sequential([ tf.keras.layers.Dense(units=1,input_shape=input_shape)]) model.summary() model.compile(optimizer='adam', loss='mae') #步骤 6 - 训练历元数据集 losses = model.fit(X_train, y_train, validation_data=(X_val, y_val), batch_size=256, epochs=10, ) #步骤 7 - 使用预测函数测试模型 model.predict(X_val.iloc[0:4, :]) #步骤 8 - 将结果与目标值进行比较 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
结论
众所周知,神经网络能够相当轻松地处理大量数据,同时提供高计算能力和并行处理能力。然而,与传统方法相比,实现神经网络仍然有点昂贵。尽管如此,它们在基于人工智能的应用中得到了广泛的应用,例如图像识别、人脸识别或股票市场预测等。