Python 使用TensorFlow实现神经网络
神经网络是人工智能领域中广泛使用的概念,其基于人脑的结构。神经网络工作在层级结构中,最简单的是一个顺序模型,当前层的输入是前一层的输出。
为了创建、训练和测试神经网络模型,我们可以使用Python中的深度学习框架Tensorflow。每个神经网络模型都基于一些简单的步骤,如获取数据、进行预测、比较预测结果,最后将其调整以接近目标。
步骤
- 步骤1 − 导入Python的numpy和pandas库,并将csv文件加载为数据框。
-
步骤2 − 导入tensorflow并将数据拆分为训练集和验证集。
-
步骤3 − 预处理和缩放两组数据。
-
步骤4 − 将两组数据分开为不同的特征。
-
步骤5 − 使用Keras模块创建一个线性神经网络模型,并为其设置adam和mae参数。注意,adam作为优化器工作,而mae在预测中工作。
-
步骤6 − 训练数据集,可以选择任意数量的epochs。这里我们只使用了10个epochs。
-
步骤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
结论
神经网络已知可以轻松处理大量数据,并提供高计算能力和并行处理能力。然而,与传统方法相比,实施神经网络仍然有一些费用较高。尽管如此,它们在基于人工智能的应用中发挥着重要作用,如图像识别、人脸识别或股市预测等。