经典网络复现(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共有七层,不包含输入,每层都包含可训练参数,每个层有多个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)的网络连接方式。

来自为知笔记(Wiz)

附件列表

原文地址:https://www.cnblogs.com/jsxyhelu/p/12381959.html

时间: 2024-11-09 02:05:11

经典网络复现(0)多层感知机和lenet的相关文章

记一下机器学习笔记 多层感知机的反向传播算法

<神经网络与机器学习>第4章前半段笔记以及其他地方看到的东西的混杂-第2.3章的内容比较古老预算先跳过. 不得不说幸亏反向传播的部分是<神机>里边人话比较多的部分,看的时候没有消化不良. 多层感知机 书里前三章的模型的局限都很明显,对于非线性可分问题苦手,甚至简单的异或都弄不了.于是多层感知机(也就是传说中的神经网络)就被发明了出来对付这个问题. 多层感知机就是由一系列的感知机,或者说神经元组成,每个神经元都接受若干的输入(树突)并产生一个输出(轴突). 这些神经元被分成若干层,每

学习笔记TF026:多层感知机

隐含层,指除输入.输出层外,的中间层.输入.输出层对外可见.隐含层对外不可见.理论上,只要隐含层节点足够多,只有一个隐含层,神经网络可以拟合任意函数.隐含层越多,越容易拟合复杂函数.拟合复杂函数,所需隐含节点数,随隐含层数量增多指数下降. 过拟合,模型预测准确率在训练集上升,在测试集下降.泛化性不好,模型记忆当前数据特征,不具备推广能力.参数太多.Hinton教授团队,Dropout.随便丢弃部分输出数据节点.创造新随机样本,增大样本量,减少特征数量,防止过拟合.bagging方法,对特征新种采

深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

一.CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二.LeNet-5网络 输入尺寸:32*32 卷积层:2个 降采样层(池化层):2个 全连接层:2个 输出层:1个.10个类别(数字0-9的概率) LeNet-5网络是针对灰度图进行训练的,输入图像大小为32*32*1,不包含输入层的情况下共有7层,每层都包含可训练参数(连接权重).注:每个层有多个Feature Map,每个Featu

多层感知机

多层感知机 多层感知机的基本知识 使用多层感知机图像分类的从零开始的实现 使用pytorch的简洁实现 多层感知机的基本知识 深度学习主要关注多层模型.在这里,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念. 隐藏层 下图展示了一个多层感知机的神经网络图,它含有一个隐藏层,该层中有5个隐藏单元. 表达公式 具体来说,给定一个小批量样本\(\boldsymbol{X} \in \mathbb{R}^{n \times d}\),其批量大小为\(

多层感知机,非权值共享型卷积神经网络,权值共享型卷积神经网络之间的关系

前言:最近学习深度学习,有感写一点总结. 我们常常所说的神经网络,一般是指原始的多层感知机,简称MLP,它是在原始感知机堆叠多层而成的,MLP完全由全连接层组成(当然也有激活函数),即Caffe里的IP层.MLP的最大的缺点在于参数众多,比如说我们的网络层为1000--1000--500--20,那么它的总的参数为:1000*1000+1000*500+500*20. 参数过多不好训练,容易产生过拟合现象. 卷积神经网络,即CNN,它大大减少的网络参数的数目,通过1. 权值共享 2. 局部连接

阿里云 经典网络使用ClassicLink连接到专用网络后,192.168网段需要添加路由

配置后,专用网络中的机器Ping不通经典网络, 查帮助说192.168网段需要手动添加路由表. 抓包能在经典网络中收到专用网络中过来的数据包,但回复的数据包不能正确发出去. 先用 route -n 查看当前路由, 10.0.0.0 10.116.207.247 255.0.0.0 UG 0 0 0 eth0 10.116.200.0 0.0.0.0 255.255.248.0 U 0 0 0 eth0 100.64.0.0 10.116.207.247 255.192.0.0 UG 0 0 0

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

基于theano的多层感知机的实现

1.引言 一个多层感知机(Multi-Layer Perceptron,MLP)可以看做是,在逻辑回归分类器的中间加了非线性转换的隐层,这种转换把数据映射到一个线性可分的空间.一个单隐层的MLP就可以达到全局最优. 2.模型 一个单隐层的MLP可以表示如下: 一个隐层的MLP是一个函数:$f:R^{D}\rightarrow R^{L}$,其中 $D$ 是输入向量 $x$ 的大小,$L$是输出向量 $f(x)$ 的大小: $f(x)=G(b^{(2)}+W^{(2)}(s(b^{(1)}+W^{

阿里云经典网络与VPC网络互通的实现

前言 众所周知,阿里云在目前的网络条件下,具有两套类型的网络,即经典网络和 VPC网络:对于申请阿里云较早的用户,大多环境下使用的是经典网络,而后 期一般申请的vps主机都是VPC网络的: 于是乎这里就出现了经典网络与VPC网络条件下,内网互通的一个问题. 内网互通一般可以通过三部曲实现: 1) 在经典网络主机的控制台下点击连接至专有网络即可: 2) 在该经典网络主机的控制台下的"添加classic link安全组"处,实现该主机与 要连接的VPC主机的安全组,实现连接即可: 3) 在