使用TensorFlow(Keras)搭建卷积神经网络ResNet实现鸢尾花分类
时间: 2024-05-07 20:22:34 浏览: 147
好的,让我们开始吧!
首先,我们需要导入需要的库和数据集。这里我们使用TensorFlow自带的鸢尾花数据集。
```python
import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
```
接下来,我们需要对数据进行预处理。因为我们使用的是卷积神经网络,所以我们需要将数据转换为图像格式。同时,我们将标签转换为one-hot编码。
```python
# 将数据转换为图像格式
X_train = X_train.reshape(-1, 1, 4, 1)
X_test = X_test.reshape(-1, 1, 4, 1)
# 将标签转换为one-hot编码
y_train = keras.utils.to_categorical(y_train, 3)
y_test = keras.utils.to_categorical(y_test, 3)
```
接下来,我们可以开始构建ResNet模型。这里我们使用Keras的Sequential模型,并添加ResNet的各个层。
```python
model = keras.Sequential()
# 第一层卷积
model.add(keras.layers.Conv2D(filters=64, kernel_size=(1, 4), strides=(1, 1), padding='valid', input_shape=(1, 4, 1)))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.Activation('relu'))
# 残差块
def residual_block(input_data, filters, strides=(1, 1)):
x = keras.layers.Conv2D(filters=filters, kernel_size=(1, 4), strides=strides, padding='valid')(input_data)
x = keras.layers.BatchNormalization()(x)
x = keras.layers.Activation('relu')(x)
x = keras.layers.Conv2D(filters=filters, kernel_size=(1, 4), strides=(1, 1), padding='valid')(x)
x = keras.layers.BatchNormalization()(x)
x = keras.layers.Add()([x, input_data])
x = keras.layers.Activation('relu')(x)
return x
# 堆叠残差块
def stack_residual_block(input_data, filters, blocks, strides=(1, 1)):
x = residual_block(input_data, filters, strides)
for i in range(1, blocks):
x = residual_block(x, filters)
return x
# 残差网络
model.add(stack_residual_block(model.output, 64, blocks=2, strides=(1, 1)))
model.add(stack_residual_block(model.output, 64, blocks=2, strides=(1, 1)))
# 全局平均池化
model.add(keras.layers.GlobalAveragePooling2D())
# 全连接层
model.add(keras.layers.Dense(3, activation='softmax'))
```
最后,我们可以编译模型并进行训练。
```python
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=16, validation_data=(X_test, y_test))
```
训练完成后,我们可以使用测试集对模型进行评估。
```python
# 评估模型
score = model.evaluate(X_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
```
这样,我们就使用TensorFlow(Keras)搭建了一个卷积神经网络ResNet,并使用鸢尾花数据集进行了分类任务。
阅读全文