zoukankan      html  css  js  c++  java
  • 经典网络复现(0)多层感知机和lenet

    对于mnist数据集,我实现了一些简单的网络,同样在20epochs训练获得的loss和acc

    序号网络结构loss和acc
    2
    model = Sequential()
    model.add(Dense(units = 121,input_dim = 28 * 28))
    model.add(Activation('relu'))
    model.add(Dense(units = 81))
    model.add(Activation('relu'))
    model.add(Dense(units = 10))
    model.add(Activation('softmax'))
    loss: 0.11605372323654592
    acc: 0.9649999737739563


    3
    model = Sequential()
    model.add(Dense(units = 121,input_dim = 28 * 28))
    model.add(Activation('relu'))
    model.add(Dense(units = 108))
    model.add(Activation('relu'))
    model.add(Dense(units = 10))
    model.add(Activation('softmax'))
    loss: 0.11722589706927537
    acc: 0.964600026607513


    4
    model = Sequential()
    model.add(Dense(units = 121,input_dim = 28 * 28))
    model.add(Activation('relu'))
    model.add(Dense(units = 81))
    model.add(Activation('relu'))
    model.add(Dense(units = 108))
    model.add(Activation('relu'))
    model.add(Dense(units = 10))
    model.add(Activation('softmax'))
    loss: 0.10050583745818585
    acc: 0.9702000021934509
    5
    model = Sequential()
    model.add(Dense(units = 121,input_dim = 28 * 28))
    model.add(Activation('relu'))
    model.add(Dense(units = 81))
    model.add(Activation('relu'))
    model.add(Dense(units = 108))
    model.add(Activation('relu'))
    model.add(Dense(units = 138))
    model.add(Activation('relu'))
    model.add(Dense(units = 169))
    model.add(Activation('relu'))
    model.add(Dense(units = 10))
    model.add(Activation('softmax'))
    loss: 0.11574177471690346
    acc: 0.9668999910354614
    6
    model = Sequential()
    model.add(Dense(units = 121,input_dim = 28 * 28))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(units = 81))
    model.add(Activation('relu'))
    model.add(Dropout(0.25))
    model.add(Dense(units = 10))
    model.add(Activation('softmax'))

    model.compile(
        loss = 'categorical_crossentropy',
        optimizer = keras.optimizers.SGD(lr=0.01,momentum=0.9,nesterov=True),
        metrics = ['accuracy']
    )
    loss: 0.08351417180134449
    acc: 0.9753000140190125

    以上都是多层感知机,以下都是卷积神经网络
    7
    def read_images(filename,items):
        file_image = open(filename,'rb')
        file_image.seek(16)
        data = file_image.read(items * 28 * 28)
        X = np.zeros(items * 28 * 28)
        for i in range(items * 28 * 28):
            X[i] = data[i] / 255
        file_image.close()
        return X.reshape(-1,28 ,28,1)

    X_train = read_images('D:/dl4cv/datesets/mnist/train-images.idx3-ubyte',60000)
    X_test = read_images('D:/dl4cv/datesets/mnist/t10k-images.idx3-ubyte',10000)
    y_train = keras.utils.to_categorical(y_train,10)
    y_test = keras.utils.to_categorical(y_test,10)

    model = Sequential()
    model.add(Conv2D(32,kernel_size = (3,3),activation='relu',input_shape=(28,28,1)))
    model.add(MaxPooling2D(pool_size =(2,2)))
    model.add(Conv2D(64,(3,3),activation='relu'))
    model.add(MaxPooling2D(pool_size =(2,2)))
    model.add(Flatten())
    model.add(Dense(128,activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(10,activation='softmax'))

    model.compile(
        loss = keras.losses.categorical_crossentropy,
        optimizer = keras.optimizers.Adadelta(),
        metrics = ['accuracy']
    )

    #plot_model(model, to_file='model1.png', show_shapes=True)

    model.fit(
        X_train,
        y_train,
        batch_size=128,
        epochs=10,
        verbose=1,
        validation_data =(X_test,y_test)
    )
    loss: 0.020046546813212628
    acc: 0.993399977684021

    注意事项:一般是dense后才链接dropout
    中间用relu,最后用softmax
    flatten一般在最后的地方。
    8
    model = Sequential()
    model.add(Conv2D(6,kernel_size = (5,5),strides = 1,activation ='relu', input_shape = (28,28,1)))  #filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)
    model.add(MaxPooling2D(pool_size = (2,2),strides = 2))

    model.add(Conv2D(16,kernel_size = (5,5),strides = 1,activation ='relu'))  #卷积核越小,filters越长
    model.add(MaxPooling2D(pool_size = (2,2),strides = 2))

    model.add(Flatten())
    #model.add(Dense(84,activation='relu')) 这里添加之后,可以提高0.1左右
    model.add(Dense(10,activation='softmax')) #输出10类

    原始的letnet
    loss: 0.05069914509201189
    acc: 0.9839000105857849



    LeNet5
    LeNet5网络虽然很小,但是包含了深度学习的基本模块:卷积层、池化层、全连接层。LeNet5共有七层,不包含输入,每层都包含可训练参数,每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每Feature Map有多个神经元。
    输入: 32∗32

    32∗32的手写字体图片,这些手写字体包含0-9数字,也就是相当于10个类别的图片。
    输出: 分类结果,0-9之间的一个数(softmax)
    2.2 各层结构及参数

    1. INPUT(输入层)
    32∗32
    2. C1(卷积层)
    选取6个5∗5
    3. S2(池化层)
    4. C3(卷积层)
    选取61个5∗5
    5. S4(池化层)
    6. C5(卷积层)
    总共120个feature map,每个feature map与S4层所有的feature map相连接,卷积核大小为5∗5
    7. F6(全连接层)
    F6相当于MLP(Multi-Layer Perceptron,多层感知机)中的隐含层,有84个节点,所以有84∗(120+1)=10164
    8. Output(输出层)
    全连接层,共有10个节点,采用的是径向基函数(RBF)的网络连接方式。






    附件列表

    • 相关阅读:
      Java高并发24-使用自定义锁生成一个消费模型
      Java高并发连载23-基于AQS实现自定义同步器
      JavaScript连载38-编写评论界面
      Java高并发22-AQS条件变量的支持
      Java高并发21-AQS在共享,独占场景下的源码介绍
      SSH 集成Shiro和EhCache,设置登录超时时间无效解决办法。
      Vue3.0 + Echarts 实现地区人口数量分布展示
      从零开始学VUE之网络模块(Axios)
      从零开始学VUE之VueX(modules)
      从零开始学VUE之VueX(actions)
    • 原文地址:https://www.cnblogs.com/jsxyhelu/p/12381959.html
    Copyright © 2011-2022 走看看