在本节中,我们将学习如何使用 TensorFlow 构建一个简单的神经网络。我们将通过以下几个步骤来完成:
环境准备
数据准备
构建神经网络模型
编译模型
训练模型
评估模型
1. 环境准备 在开始之前,确保你已经安装了 TensorFlow。你可以使用以下命令来安装 TensorFlow:
2. 数据准备 在这里,我们将使用经典的 iris
数据集。我们将加载数据并对其进行预处理。iris
数据集是一个多分类问题,包含 150 个样本,3 个类别,4 个特征。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_irisiris = load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2 , random_state=42 ) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
3. 构建神经网络模型 使用 tf.keras
创建一个简单的全连接神经网络。将使用 Sequential
API 构建模型。
1 2 3 4 5 6 7 8 import tensorflow as tfmodel = tf.keras.Sequential([ tf.keras.layers.Dense(10 , activation='relu' , input_shape=(X_train.shape[1 ],)), tf.keras.layers.Dense(10 , activation='relu' ), tf.keras.layers.Dense(3 , activation='softmax' ) ])
在上面的代码中,我们构建了一个包含两个隐藏层的神经网络,每个隐藏层都有 10 个神经元。输出层使用 softmax
激活函数,适合多分类问题。
4. 编译模型 在编译模型时,需要指定损失函数、优化器和评估指标。
1 2 3 4 5 model.compile ( optimizer='adam' , loss='sparse_categorical_crossentropy' , metrics=['accuracy' ] )
在这里,我们使用 adam
优化器,损失函数为 sparse_categorical_crossentropy
,因为我们的目标变量是整数形式。
5. 训练模型 使用 fit
方法来训练模型,指定训练数据、标签和训练的周期数。
1 history = model.fit(X_train, y_train, epochs=50 , validation_split=0.2 )
在这一行代码中,epochs=50
表示我们将训练 50 个周期,validation_split=0.2
表示将 20% 的训练数据用于验证。
6. 评估模型 训练完模型后,我们可以在测试集上评估其性能。
1 2 test_loss, test_accuracy = model.evaluate(X_test, y_test) print (f'测试损失: {test_loss} , 测试准确率: {test_accuracy} ' )
以上代码将输出在测试集上的损失值和准确率。
7. 完整代码示例 以下是整个流程的完整代码汇总:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_irisimport tensorflow as tfiris = load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2 , random_state=42 ) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) model = tf.keras.Sequential([ tf.keras.layers.Dense(10 , activation='relu' , input_shape=(X_train.shape[1 ],)), tf.keras.layers.Dense(10 , activation='relu' ), tf.keras.layers.Dense(3 , activation='softmax' ) ]) model.compile ( optimizer='adam' , loss='sparse_categorical_crossentropy' , metrics=['accuracy' ] ) history = model.fit(X_train, y_train, epochs=50 , validation_split=0.2 ) test_loss, test_accuracy = model.evaluate(X_test, y_test) print (f'测试损失: {test_loss} , 测试准确率: {test_accuracy} ' )
经过这些步骤,我们成功地从零开始构建了一个简单的神经网络并在 iris
数据集上进行了训练和评估。你可以根据自己的需求修改网络结构或训练参数。