首页 > 架构设计 > 基础设施 > 经典卷积神经网络算法(2):AlexNet
import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfrom tensorflow import kerasfrom tensorflow.keras import datasets, layers, optimizers, Sequential ,metrics(x, y), (x_test, y_test) = datasets.cifar100.load_data()print(x.shape, y.shape)print(x_test.shape, y_test.shape)index = 1fig, axes = plt.subplots(4, 3, figsize=(8, 4), tight_layout=True)for row in range(4):
for col in range(3):
axes[row, col].imshow(x[index])
axes[row, col].axis('off')
axes[row, col].set_title(y[index][0])
index += 1plt.show()y = tf.squeeze(y, axis=1)y_test = tf.squeeze(y_test, axis=1)def preprocess(x, y):
x = tf.cast(x, dtype=tf.float32) / 255. # 将每个像素值映射到[0, 1]内
y = tf.cast(y, dtype=tf.float32)
return x, ytrain_db = tf.data.Dataset.from_tensor_slices((x, y))train_db = train_db.shuffle(1000).map(preprocess).batch(64)test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))test_db = test_db.shuffle(1000).map(preprocess).batch(64)model = Sequential([
layers.Conv2D(96,(11,11),strides=(2,2),# input_shape=(in_shape[1],in_shape[2],in_shape[3]),
padding='same',activation='relu',kernel_initializer='uniform'),
layers.MaxPooling2D(pool_size=(3,3),strides=(2,2)),
layers.Conv2D(256,(5,5),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'),
layers.MaxPooling2D(pool_size=(3,3),strides=(2,2)),
layers.Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'),
layers.Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'),
layers.Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'),
layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),
layers.Flatten(),
layers.Dense(2048,activation='relu'),
layers.Dropout(0.5),
layers.Dense(2048,activation='relu'),
layers.Dropout(0.5),
layers.Dense(100,activation='softmax')])model.compile(optimizer=keras.optimizers.Adam(),loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.build(input_shape=[None, 32, 32, 3]) # 指定输入x = tf.random.normal([1, 32, 32, 3]) # 1是指输入一张图像,两个32是图像长宽,3是指3通道out = model(x)out.shapemodel.fit(train_db,epochs=5, validation_data=test_db) # 训练模型
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69973775/viewspace-2690769/ ,如需转载,请注明出处,否则将追究法律责任。