构建一个简单的神经网络使用TensorFlow可以很快地完成。以下是构建一个简单的多层感知器(MLP)用于分类任务的步骤,我们将以鸢尾花数据集(Iris dataset)为例:
1. 导入所需的库
import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from tensorflow.keras.utils import to_categorical
2. 加载和预处理数据
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 将标签转换为One-hot编码
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y.reshape(-1, 1))
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 将数据标准化
scaler = tf.keras.layers.Normalization(axis=1)
scaler.adapt(X_train)
X_train = scaler(X_train)
X_test = scaler(X_test)
3. 构建模型
# 构建一个简单的MLP模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(4,)), # 输入层,4个特征
tf.keras.layers.Dense(10, activation='relu'), # 隐藏层
tf.keras.layers.Dense(3, activation='softmax') # 输出层,3个类别
])
4. 编译模型
model.compile(
optimizer='adam', # 优化器
loss='categorical_crossentropy', # 损失函数
metrics=['accuracy'] # 评估指标
)
5. 训练模型
# 训练模型
history = model.fit(
X_train, y_train,
epochs=100, # 训练周期
batch_size=5, # 批量大小
validation_split=0.2 # 划分一部分训练数据用于验证
)
6. 评估模型
# 在测试集上评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Test accuracy: {accuracy}")
7. 进行预测
# 使用模型进行预测
predictions = model.predict(X_test)
# 将预测结果转换回标签
predicted_classes = tf.argmax(predictions, axis=1)
true_classes = tf.argmax(y_test, axis=1)
8. 查看混淆矩阵
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# 计算混淆矩阵
cm = confusion_matrix(true_classes, predicted_classes)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()