代码和之前一样,就是在model这里改了下。
首先,你可以借鉴这里的爬取数据集的方法:
image-classification/code/data-crawling/README.md at master · chgl16/image-classification · GitHub
我就直接用之前的花朵图的数据集了。
1.VGG16model
可以看看这个来了解:深度学习12. CNN经典网络 VGG16 - 知乎 (zhihu.com)
模型代码:
model = models.Sequential()
model.add(Conv2D(64, (3, 3), padding = 'same', activation='relu', input_shape=(180, 180, 3)))
model.add(Conv2D(64, (3, 3), padding = 'same', activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(128, (3, 3), padding = 'same', activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(1000, activation='softmax'))
model.summary()
记得前面要进行标准化哦。
由于模型参数大(dropout后还有8千万),复杂,跑起来比较久。浅浅的跑了10次:
感觉很难用到小型化的设备中啊,懒的搞,溜~