tensorflow LeNet

LeNet 即 LeNet5,由 Yann LeCun 在 1998 年提出,做为最早的卷积神经网络之一,是许 多神经网络架构的起点,其网络结构如图 下所示。

 借鉴点:共享卷积核,减少网络参数。

        在后期发展中,降采样层被 m a x _ p o o l i n g max\_poolingmax_pooling 所取代,分类也被 s o f t m a x softmaxsoftmax 所替代,现在 T e n s o r f l o w TensorflowTensorflow 或者其他框架下的网络实现为:

 

 总结:
(1)到现在LeNet-5的实际应用价值并不大,更多的时候是作为学习实例,了解其中卷积、采样、全连接、激活函数等CNN基础内容。
(2)降采样和池化的区别:原始的信号处理采用的就是采样,说白了就是采集样本,这种采样一旦方式确定那么接下来所有框选取的像素位置都是固定的,要么隔一个、要么隔两个;池化中平均池化是利用了框选位置的所有像素特征,最大池化虽然只用了最大像素值,但是这个像素值的位置是不确定的,所选取的特征也是具有代表性的。
(3)LeNet-5 对于小尺寸的图像还能够有一定的识别率,但是当输入图像尺寸很大时,为了满足网络对于输入的要求需要进行缩放,就会丢失局部细微特征,LeNet-5 就比较难捕捉不同类别间的区别了。

代码实现:

import tensorflow as tf
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf
import os
import numpy as np
from matplotlib import pyplot as plt
from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense
from tensorflow.keras import Model

np.set_printoptions(threshold=np.inf)

cifar10 = tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


class LeNet(Model):
    def __init__(self):
        super(LeNet, self).__init__()
        #第一层
        self.c1 = Conv2D(filters=6, kernel_size=(5, 5),activation='sigmoid')
        self.p1 = MaxPool2D(pool_size=(2, 2), strides=2)
        
        #第二层
        self.c2 = Conv2D(filters=16, kernel_size=(5, 5),activation='sigmoid')
        self.p2 = MaxPool2D(pool_size=(2, 2), strides=2)

        self.flatten = Flatten()
        
        #三层连接网络
        self.f1 = Dense(120, activation='sigmoid')
        self.f2 = Dense(84, activation='sigmoid')
        self.f3 = Dense(10, activation='softmax')


    def call(self, x):
        x = self.c1(x)
        x = self.p1(x)

        x = self.c2(x)
        x = self.p2(x)

        x = self.flatten(x)
        x = self.f1(x)
        x = self.f2(x)
        y = self.f3(x)
        return y


model = LeNet()
optimizer = tf.keras.optimizers.Adam()
model.compile(optimizer=optimizer ,
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])


history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XMM-struggle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值