no.2 LeNet介绍,以及pytorch,tensorflow v1与v2的介绍

LeNet是一种经典的卷积神经网络架构,最初由Yann LeCun等人于1998年提出,主要用于手写数字识别任务。LeNet是深度学习领域中最早的卷积神经网络之一,被认为是卷积神经网络的开山之作。

LeNet包含七个不同的层,其中包括两个卷积层、两个子采样层和三个全连接层。每个卷积层都使用卷积操作提取特征,子采样层用于减小特征映射的尺寸并减少计算量。全连接层用于将卷积层的输出映射到目标类别上。

LeNet的输入是一张28×28像素的灰度图像,输出是一个10维向量,表示输入图像属于10个数字中的哪一个。LeNet使用的激活函数是sigmoid函数。LeNet的训练使用的是反向传播算法和随机梯度下降算法。

尽管LeNet在当时的手写数字识别任务中表现出色,但由于其结构较为简单,不足以应对现代复杂的图像识别任务。但是,LeNet为卷积神经网络的发展奠定了基础,后续的深度学习研究在此基础上不断发展和完善,从而推动了深度学习技术的快速发展。

需要注意的是:pytorch Tensor的排列顺序[batch,channel,height,width]

                        Tensorflow Tensor的排列顺序[batch,heighr,width,channel]

pytorch与tensorflow:两者属于不同的神经网络搭建架构,举个栗子:

下面是pytorch实现的代码

    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(32*5*5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

下面是tensorflow的实现代码

  def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = Conv2D(32, 3, activation='relu')
        self.flatten = Flatten()
        self.d1 = Dense(128, activation='relu')
        self.d2 = Dense(10, activation='softmax')

可以看到不同的变量名和参数排列,完成了同样的事情(上面两段代码的实验结果并不完全一样,只需要单独关注相同操作的行代码即可)

值得注意的是tensorflow中卷积padding参数与计算是不一样的,不需要padding时使用Valid,需要使用padding时使用Same,它会自己(计算你需要补多少0)帮你补的。

tensflow v1和v2的区别:

1.tensorflow checkpoint文件的版本

tensorflow checkpoint文件的版本_黑暗星球的博客-CSDN博客

2.Tensorfow1.0提供给使用者的接口是底层接口,主要集中在Tensorflow的Python Frontend层和layers,这些层是在TensorFlow底层算法引擎的基础之上,使用Python的封装,这导致1.0的使用比较麻烦,理解难度较大。当然1.0也支持Keras接口,但需要用户自己选择。

Tenorflow2.x提供给使用者的接口主要在Keras模型之上,Keras对底层的API进行了封装,使用根据的简洁和简单。2.X版本中默认使用keras作为高级API.

3内部的动态与静态结构差异

1.X默认方式是先要定义一个静态结构,然后训练操作流程时独立的。这样运行效率比较高,但是调试起来费劲。最直观的一点,就是一些在函数中预先定义静态结构“彷佛”是不执行的,而写在后面的语句彷佛先执行了一样。2.X版本Eager execution(动态图机制默认开启),动态图更加直观,方便开发者理解与调试。

4@tf.function装饰器

将python代码转化为腾搜人flow的图结构,能够在GPU,TPU上进行运算。由于TensorFlow图的构建需要额外的开销,因此仅当函数的计算量较大时才适合使用@tf.function装饰器。此外,由于图的构建和执行都是在TensorFlow的计算图模式下进行的,因此可能需要特别注意一些细节,如变量的定义和使用等。

@tf.function装饰器在TensorFlow 1.x和TensorFlow 2.x版本中都可以使用,但在两个版本中的具体实现略有不同

在TensorFlow 1.x中,@tf.function装饰器实际上是通过tf.Graph构建静态图来实现的。在这种情况下,装饰器将Python函数转换为计算图,并使用Session运行图,这与TensorFlow 2.x的动态图模式不同。

在TensorFlow 2.x中,@tf.function装饰器可以实现静态图和动态图之间的转换,因为TensorFlow 2.x默认使用动态图模式。在这种情况下,装饰器将Python函数转换为TensorFlow计算图并使用TensorFlow运行图。

需要注意的是,在TensorFlow 1.x中使用@tf.function时,需要确保所有的TensorFlow操作都使用TensorFlow 1.x API而非TensorFlow 2.x API。这是因为在TensorFlow 1.x中,@tf.function装饰器会将代码转换为静态图,而TensorFlow 2.x API只适用于动态图模式下。如果混合使用两个版本的API,可能会导致代码运行错误或性能下降。

5 模型实例化不同

tensorflow中的两种方式搭建模型

1.使用Keras Functional API(tf1中的搭建模型风格)

2.使用Model Subclassing API(类似于pytorch中搭建模型风格

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值