重要找数据集找特征(feature),卷积 graphic 计算机视觉最终是特征,机器学习并没有什么区别。特征和,机器学习可以把特征做的很好,神经网络不想自己搞查找特征需要机器学习来找特征。
李飞飞共享了 ImageNet 数据库,100 万张图片有 100 种分类,大家都来刷这个分类。没有计算能力也现在模型。
GPU 可让我们在更短时间内调更多参数。
AlexNet 实现代码如下,有关 AlexNet 设计随后有机会会给大家分享,今天开 AlexNet 有些简陋不过当初也是飞跃性的一次。今天神经网络做的越来深。
import utils
import sys
sys.path.append('..')
import random
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 120
import matplotlib.pyplot as plt
import tarfile
import os
from mxnet.gluon import data as gdata, utils as gutils
from mxnet import image
from mxnet import init
net = nn.Sequential()
with net.name_scope():
# first phase
net.add(nn.Conv2D(
channels=96, kernel_size=11, strides=4, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3, strides=2))
# second phase
net.add(nn.Conv2D(
channels=256, kernel_size=5, padding=2, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3, strides=2))
# third phase
net.add(nn.Conv2D(
channels=384, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.Conv2D(
channels=384, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.Conv2D(
channels=256, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3,strides=2))
#fourth phase
net.add(nn.Flatten())
net.add(nn.Dense(4096),activation='relu')
net.add(nn.Dropout(.5))
# fifth phase
net.add(nn.Dense(4096),activation="relu")
net.add(nn.Dropout(.5))
# sixth
net.add(nn.Dense(10))
from mxnet import ndarray as nd
from mxnet import autograd as ag
from mxnet import gluon
from mxnet.gluon import nn
import mxnet as mx
import utils
import sys
sys.path.append('..')
import random
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 120
import matplotlib.pyplot as plt
import tarfile
import os
from mxnet.gluon import data as gdata, utils as gutils
from mxnet import image
from mxnet import init
net = nn.Sequential()
with net.name_scope():
# first phase
net.add(nn.Conv2D(
channels=96, kernel_size=11, strides=4, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3, strides=2))
# second phase
net.add(nn.Conv2D(
channels=256, kernel_size=5, padding=2, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3, strides=2))
# third phase
net.add(nn.Conv2D(
channels=384, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.Conv2D(
channels=384, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.Conv2D(
channels=256, kernel_size=3, padding=1, activation='relu'
))
net.add(nn.MaxPool2D(pool_size=3,strides=2))
#fourth phase
net.add(nn.Flatten())
net.add(nn.Dense(4096,activation='relu'))
net.add(nn.Dropout(.5))
# fifth phase
net.add(nn.Dense(4096,activation="relu"))
net.add(nn.Dropout(.5))
# sixth
net.add(nn.Dense(10))
batch_size = 64
def transform(data,label):
data = image.imresize(data,224,224)
return utils.transform(data,label)
train_data, test_data = utils.load_data_fashion_mnist(batch_size,transform)
ctx = mx.cpu()
net.initialize(ctx=ctx,init=init.Xavier())
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(
net.collect_params(),'sgd',{'learning_rate':0.01}
)
for epoch in range(10):
train_loss = 0.
train_acc = 0.
for data, label in train_data:
label = label.as_in_context(ctx)
with ag.record():
output = net(data.as_in_context(ctx))
loss = softmax_cross_entropy(output,label)
loss.backward()
trainer.step(batch_size)
train_loss += nd.mean(loss).asscalar()
train_acc += utils.accuracy(output,label)
test_acc = utils.evaluate_accuracy(test_data,net)
print("Epoch %d. Loss: %f, Train acc %f, Test acc %f" % (epoch, train_loss/len(train_data), train_acc/len(train_data), test_acc))