深度学习

mac2024-10-26  51

 建个VGG网玩玩

根据输入图为224*224*3,按224*224—>112*112—>56*56—>28*28—>14*14—>7*7的套路来规矩卷积。

通道数翻倍,由64依次增加到128,再到256,直至512保持不变,不再翻倍高和宽变减半,由 224→112→56→28→14→7 from keras.layers import * from keras.models import * from keras.optimizers import * height = width = 224 def build_vgg(input_shape=(height, width, 3), num_classes=1000): model = Sequential() # Block 1, 2层 model.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same', input_shape=input_shape)) model.add(Convolution2D(64, 3, 3, activation='relu',border_mode='same')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Block 2, 2层 model.add(Convolution2D(128, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(128, 3, 3, activation='relu',border_mode='same')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Block 3, 3层 model.add(Convolution2D(256, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(256, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(256, 3, 3, activation='relu',border_mode='same')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Block 4, 3层 model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Block 5, 3层 model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(Convolution2D(512, 3, 3, activation='relu',border_mode='same')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Classification block, 全连接3层 model.add(Flatten()) model.add(Dense(4096, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(4096, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax')) return model if __name__ == "__main__": # reference:keras中文手册: https://keras.io/zh/models/model/ # 模型结构 model = build_vgg() # 配置器 model.compile(loss='categorical_crossentropy', optimizer=Adam(0.0002), metrics=['accuracy']) # 模型打印 print(model.summary()) pass

最新回复(0)