zoukankan      html  css  js  c++  java
  • LeNet

    import mxnet as mx
    import sys
    from mxnet import autograd,nd
    from mxnet import gluon,init
    from mxnet.gluon import nn,loss as gloss
    from mxnet.gluon import data as gdata
    
    # 读取数据
    mnist_train = gdata.vision.FashionMNIST(train=True)
    mnist_test = gdata.vision.FashionMNIST(train=False)
    
    batch_size = 256
    
    trainsformer = gdata.vision.transforms.ToTensor()
    
    if sys.platform.startswith('win'):
        num_workers = 0
    else:
        num_workers = 4
    
    train_iter = gdata.DataLoader(mnist_train.transform_first(trainsformer),batch_size=batch_size,shuffle=True,num_workers=num_workers)
    test_iter = gdata.DataLoader(mnist_test.transform_first(trainsformer),batch_size=batch_size,shuffle=False,num_workers=num_workers)
    
    # 使用GPU
    def try_gpu():
        try:
            ctx = mx.gpu()
            _ = nd.zeros((1,),ctx=ctx)
        except mx.base.MXNetError:
            ctx = mx.cpu()
        return ctx
    
    # 计算正确率
    def accuracy(y_hat,y):
        return (y_hat.argmax(axis=1)==y.astype('float32').mean().asscalar())
    def evaluate_accuracy(data_iter,net,ctx):
        acc = nd.array([0],ctx=ctx)
        for X,y in data_iter:
            X = X.as_in_context(ctx)
            y = y.as_in_context(ctx)
            acc += accuracy(net(X),y)
        return acc.asscalar() / len(data_iter)
    
    # LeNet,建立卷积神经网络
    net = nn.Sequential()
    net.add(nn.Conv2D(channels=6, kernel_size=5, activation='sigmoid'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Conv2D(channels=16, kernel_size=5, activation='sigmoid'),
            nn.MaxPool2D(pool_size=2, strides=2),
            # Dense 会默认将(批量大小,通道,高,宽)形状的输入转换成
            # (批量大小,通道 * 高 * 宽)形状的输入。
            nn.Dense(120, activation='sigmoid'),
            nn.Dense(84, activation='sigmoid'),
            nn.Dense(10))
    
    X = nd.random.uniform(shape=(1,1,28,28))
    net.initialize()
    
    for layer in net:
        X = layer(X)
        print(layer.name,'output shape:	',X.shape)
    
    K = nd.array([[[0, 1], [2, 3]], [[1, 2], [3, 4]]])
    K = nd.stack(K, K + 1, K + 2)
    print(K)
  • 相关阅读:
    javascript 显示类型转换
    javascript 隐式类型转换
    inline/inline-block/block 的区别
    javascript 类型检测
    title与h1的区别、b与strong的区别、i与em的区别?
    CSS定位方式有哪些?position属性的值有哪些?他们之间的区别是什么?
    列出display的值,说明他们的作用。position的值, relative和 absolute定位原点是?
    语义化的理解
    src与href的区别
    img的alt和title的异同?
  • 原文地址:https://www.cnblogs.com/TreeDream/p/10043092.html
Copyright © 2011-2022 走看看