对iris数据集用letnet神经网络并画出其liss曲线python代码
时间: 2024-04-30 14:20:42 浏览: 15
LeNet是一种经典的卷积神经网络,适用于图像识别任务。下面是用LeNet神经网络对Iris数据集进行分类的Python代码,并绘制其学习曲线。
首先,我们需要导入必要的库和Iris数据集:
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import tensorflow as tf
from tensorflow import keras
# Load Iris dataset
iris = load_iris()
X = iris.data
y = iris.target
```
接下来,我们将数据集划分为训练集和测试集,并进行标准化:
```python
# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Standardize dataset
mean = np.mean(X_train, axis=0)
std = np.std(X_train, axis=0)
X_train = (X_train - mean) / std
X_test = (X_test - mean) / std
```
然后,我们定义LeNet神经网络的结构:
```python
# Define LeNet model
model = keras.Sequential([
keras.layers.Conv2D(filters=6, kernel_size=(5, 5), activation='relu', input_shape=(4, 1, 1)),
keras.layers.AveragePooling2D(),
keras.layers.Conv2D(filters=16, kernel_size=(5, 5), activation='relu'),
keras.layers.AveragePooling2D(),
keras.layers.Flatten(),
keras.layers.Dense(units=120, activation='relu'),
keras.layers.Dense(units=84, activation='relu'),
keras.layers.Dense(units=3, activation='softmax')
])
```
接下来,我们编译模型并开始训练:
```python
# Compile model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Train model
history = model.fit(X_train.reshape(-1, 4, 1, 1), y_train, epochs=50, batch_size=16, validation_data=(X_test.reshape(-1, 4, 1, 1), y_test))
```
最后,我们可以绘制模型的学习曲线:
```python
import matplotlib.pyplot as plt
# Plot learning curves
plt.plot(history.history['accuracy'], label='training accuracy')
plt.plot(history.history['val_accuracy'], label='validation accuracy')
plt.title('LeNet learning curves')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(loc='lower right')
plt.show()
```
完整代码如下:
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
# Load Iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Standardize dataset
mean = np.mean(X_train, axis=0)
std = np.std(X_train, axis=0)
X_train = (X_train - mean) / std
X_test = (X_test - mean) / std
# Define LeNet model
model = keras.Sequential([
keras.layers.Conv2D(filters=6, kernel_size=(5, 5), activation='relu', input_shape=(4, 1, 1)),
keras.layers.AveragePooling2D(),
keras.layers.Conv2D(filters=16, kernel_size=(5, 5), activation='relu'),
keras.layers.AveragePooling2D(),
keras.layers.Flatten(),
keras.layers.Dense(units=120, activation='relu'),
keras.layers.Dense(units=84, activation='relu'),
keras.layers.Dense(units=3, activation='softmax')
])
# Compile model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Train model
history = model.fit(X_train.reshape(-1, 4, 1, 1), y_train, epochs=50, batch_size=16, validation_data=(X_test.reshape(-1, 4, 1, 1), y_test))
# Plot learning curves
plt.plot(history.history['accuracy'], label='training accuracy')
plt.plot(history.history['val_accuracy'], label='validation accuracy')
plt.title('LeNet learning curves')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(loc='lower right')
plt.show()
```