Python Resnet 网络搭建与训练:CIFAR-10 数据集实战
以下是用 Python 搭建 Resnet 网络并进行训练的示例代码:
首先,加载必要的库:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.datasets import cifar10
接着,定义一个 residual block:
def residual_block(x, filters, stride):
shortcut = x
x = layers.Conv2D(filters, 3, strides=stride, padding='same')(x)
x = layers.BatchNormalization()(x)
x = layers.ReLU()(x)
x = layers.Conv2D(filters, 3, strides=1, padding='same')(x)
x = layers.BatchNormalization()(x)
if stride != 1 or shortcut.shape[-1] != filters:
shortcut = layers.Conv2D(filters, 1, strides=stride, padding='same')(shortcut)
shortcut = layers.BatchNormalization()(shortcut)
x = layers.Add()([x, shortcut])
x = layers.ReLU()(x)
return x
然后,定义一个 Resnet 网络:
def resnet(input_shape, num_classes):
inputs = keras.Input(shape=input_shape)
x = layers.Conv2D(64, 7, strides=2, padding='same')(inputs)
x = layers.BatchNormalization()(x)
x = layers.ReLU()(x)
x = layers.MaxPooling2D(pool_size=3, strides=2, padding='same')(x)
for filters in [64, 128, 256, 512]:
stride = 1 if filters == 64 else 2
x = residual_block(x, filters, stride)
for _ in range(1, 3):
x = residual_block(x, filters, 1)
x = layers.GlobalAveragePooling2D()(x)
outputs = layers.Dense(num_classes, activation='softmax')(x)
model = keras.Model(inputs, outputs)
return model
接下来,加载数据集并进行预处理:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
然后,把数据划分为训练集、测试集和验证集:
x_train, x_val = x_train[:40000], x_train[40000:]
y_train, y_val = y_train[:40000], y_train[40000:]
最后,编译模型并进行训练:
model = resnet((32, 32, 3), 10)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_val, y_val))
这样就完成了用 Python 搭建 Resnet 网络并进行训练的过程。
原文地址: https://www.cveoy.top/t/topic/nVlL 著作权归作者所有。请勿转载和采集!