后来发现了tflearn里面有一个alexnet来分类Oxford的例子,好开心,在基于tflearn对一些日常layer的封装,代码量只有不到50行,看了下内部layer的实现,挺不错的,写代码的时候可以多参考参考,代码地址:.
- from __future__ import division, print_function, absolute_import
- import tflearn
- from tflearn.layers.core import input_data, dropout, fully_connected
- from tflearn.layers.conv import conv_2d, max_pool_2d
- from tflearn.layers.normalization import local_response_normalization
- from tflearn.layers.estimator import regression
- import tflearn.datasets.oxflower17 as oxflower17
- X, Y = oxflower17.load_data(one_hot=True, resize_pics=(227, 227))
- # Building 'AlexNet'
- network = input_data(shape=[None, 227, 227, 3])
- network = conv_2d(network, 96, 11, strides=4, activation='relu')
- network = max_pool_2d(network, 3, strides=2)
- network = local_response_normalization(network)
- network = conv_2d(network, 256, 5, activation='relu')
- network = max_pool_2d(network, 3, strides=2)
- network = local_response_normalization(network)
- network = conv_2d(network, 384, 3, activation='relu')
- network = conv_2d(network, 384, 3, activation='relu')
- network = conv_2d(network, 256, 3, activation='relu')
- network = max_pool_2d(network, 3, strides=2)
- network = local_response_normalization(network)
- network = fully_connected(network, 4096, activation='tanh')
- network = dropout(network, 0.5)
- network = fully_connected(network, 4096, activation='tanh')
- network = dropout(network, 0.5)
- network = fully_connected(network, 17, activation='softmax')
- network = regression(network, optimizer='momentum',
- loss='categorical_crossentropy',
- learning_rate=0.001)
- # Training
- model = tflearn.DNN(network, checkpoint_path='model_alexnet',
- max_checkpoints=1, tensorboard_verbose=2)
- model.fit(X, Y, n_epoch=1000, validation_set=0.1, shuffle=True,
- show_metric=True, batch_size=64, snapshot_step=200,
- snapshot_epoch=False, run_id='alexnet_oxflowers17')
使用tflearn版本的alexnet来做实验,从TensorBoard上得到的基本效果如下, alexnet graph 如下: