首页 > 其他分享 >深度学习-->卷积神经网络

深度学习-->卷积神经网络

时间:2023-08-01 17:00:14浏览次数:20  
标签:weight -- self 二维 corr2d shape 卷积 神经网络

二维卷积层:

 

from mxnet import autograd, nd
from mxnet.gluon import nn


# 定义函数corr2d,用于实现二维卷积操作

def corr2d(x, k):
    # 获取卷积核的高度和宽度
    h, w = k.shape
    # 初始化输出y,其形状为(x.shape[0] - h + 1, x.shape[1] - w + 1)
    y = nd.zeros((x.shape[0] - h + 1, x.shape[1] - w + 1))
    # 通过两个for循环计算二维卷积操作
    for i in range(y.shape[0]):
        for j in range(y.shape[1]):
            y[i, j] = (x[i:i + h, j:j + w] * k).sum()
    return y


# 定义输入张量x和卷积核k,并使用corr2d函数计算二维卷积结果
x = nd.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])  # 输入张量x
k = nd.array([[0, 1], [2, 3]])  # 卷积核k
print(corr2d(x, k))  # 输出二维卷积结果


# 二维卷积层的定义

class Conv2D(nn.Block):
    def __init__(self, kernel_size, **kwargs):
        super(Conv2D, self).__init__(**kwargs)
        # 定义卷积层的权重参数self.weight和偏置参数self.bias
        self.weight = self.params.get('weight', shape=kernel_size)
        self.bias = self.params.get('bias', shape=(1,))

    def forward(self, x):
        # 在forward方法中使用corr2d函数进行二维卷积操作,并返回结果
        return corr2d(x, self.weight.data() + self.bias.data())


# 定义输入张量x、卷积核k,计算二维卷积结果y
x = nd.ones((6, 8))  # 输入张量x
x[:, 2:6] = 0
print(x)
k = nd.array([[1, -1]])  # 卷积核k
print(k)
y = corr2d(x, k)  # 输出二维卷积结果
print(y)

# 通过数据学习核数组

# 定义一个含有1个输出通道、核数组形状为(1, 2)的二维卷积层
conv2d = nn.Conv2D(1, kernel_size=(1, 2))
conv2d.initialize()

# 将输入x和输出y进行形状变换,使其适应二维卷积层的输入要求
x = x.reshape((1, 1, 6, 8))  # 改变输入张量x的形状
y = y.reshape((1, 1, 6, 7))  # 改变输出张量y的形状

# 进行10次迭代的训练
for i in range(10):
    with autograd.record():
        y_hat = conv2d(x)  # 获取卷积层的输出结果
        loss = (y_hat - y) ** 2  # 计算损失函数,即预测值与真实值的差的平方

    loss.backward()  # 自动求导,计算损失函数关于参数的梯度

    conv2d.weight.data()[:] -= 3e-2 * conv2d.weight.grad()  # 更新卷积层的权重参数

    if (i + 1) % 2 == 0:
        print('batch %d, loss %.3f' % (i + 1, loss.sum().asscalar()))

# 打印学习得到的核数组
print(conv2d.weight.data().reshape((1, 2)))

 

标签:weight,--,self,二维,corr2d,shape,卷积,神经网络
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17597427.html

相关文章

  • Eclipse和idea对比
    1、idea的日志打印很好用,自己鼠标向上滑动之后,就不会滚屏了,知道我们是在看日志了。而且日志打很多也不会被覆盖。Eclips就不太方便,Eclips在不断打日志时,控制台会滚动起来不方便看日志,而且Eclipse日志多了,会覆盖以前的旧日志。缓存太小了。 ......
  • 学生信息管理小系统(Java)
    一、题目要求 需要实现对应的操作二、思路(1)先设计一个主菜单界面,用户可以选择对应的功能;(2)每个板块对应一个方法,实现具体的操作;(3)最后在main函数中使用switch方法根据用户的选择对应不同的结果;三、代码1importjava.util.ArrayList;2importjava.util.Scanner;3......
  • mvc的return view复选框反填
    首先我后台返回的是选中的复选框id字符串,把这个字符串绑定到一个控件上             在文档就绪函数获取要反填的id字符串和复选框元素,遍历多选框元素并设置选中状态,最后刷新表单。  ......
  • 2023年最新面试题
    1、写出js遍历的几种方法。2、Vue子组件如何调用父组件方法,父组件如何调用子组件方法。3、父子组件之间通信,如何对数据进行深度监听。4、写出一个闭包5、写出至少两种水平垂直居中的方法6、已知一个对象a,在不知道第一个属性键名的情况下,如何获取其第一个属性的值?7、写出一......
  • CodeGeeX2 模型全新上线,编程助手能力全面升级!
    第二代CodeGeeX代码生成模型CodeGeeX2-6B已于近日发布,并在CodeGeeX编程助手插件上全面上线。新模型基于ChatGLM2-6B架构加入代码预训练实现,精度更高、速度更快、能力更强。下面我们一起来看一下新版模型给CodeGeeX编程助手带来的变化吧:一、代码生成更快更精准,问答更智能相比......
  • A Novel Noise Injection-based Training Scheme for Better Model Robustness
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2302.10802......
  • 常用sql
    本月的所有日期。找一个id有1~31的表SELECTDATE_FORMAT(date_add(last_day(curdate()),INTERVAL(cast(help_topic_idASsignedINTEGER)-DAY(last_day(curdate())))+1DAY),'%Y-%m-%d')DAYFROMmysql.help_topicWHEREhelp_topic_id<DAY(last_day(cu......
  • easyExcel设置自动换行
    1//内容样式策略2WriteCellStylecontentWriteCellStyle=newWriteCellStyle();3//垂直居中,水平居中4contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);5contentWriteCellStyle.setHorizontalAlignment(......
  • 【质量保证】软测流程
    软测流程,或者说是软件测试的生命周期更为精确,听起来有点高大上的一个组合词!白话翻译下,就是咱测试同学啊参与了整个软件生命周期中的哪些环节并干了哪些活儿,这是不是更好理解一点。面试中很常见的一道题,你们真的答好了嘛?铺垫到此结束,咱直接开始说正事吧 编号流程项参与......
  • Educational Codeforces Round 152 (Rated for Div. 2) C. Binary String Copying
    题目大意为给定一个01字符串,给定m个区间,对于每个区间进行一次局部排序,求能得到的字符串种类数解法:因为字符串只包含0,1两个字符,我们观察可以得到,对于不同的区间来说如果排序后一样则说明肯定是某些位置在排序过程中无贡献,因此我们只需找出有贡献的位置即可对于一个区间[l,r],来说......