自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 待训练参数的比较:深度可分离卷积,多层感知机,普通卷积层

分离卷积的独立计算每个卷积核只关注单个通道的信息。堆积多个可分离卷积运算上图的输入是第一步骤的输出,实现两个步骤开计算,此步骤每个卷积核可以联合多个通道的信息(我的理解是每个卷积核kernel_size=1,可以将第一步骤的输入进行相加,而卷积核的数量(本例为4)则由想得到的输出的通道数所决定(本例为4))。通过上面两个步骤即可将普通卷积进行分开运算,即为深度可分离卷积。

2024-12-09 11:21:21 458

原创 反向传播算法中的误差项

在反向传播算法中,我们需要计算每个神经元的误差项,以便更新网络中的权重。其中,wkj是权重,aj 是前一层神经元的输出,bk是偏置项。zk 是输出层神经元的加权输入(即未经过激活函数的输入)。其中,yk 是目标值,yk^​ 是神经网络的输出值。E是损失函数(例如均方误差)。计算 ∂yk^/∂zk。

2024-12-06 16:20:08 327

原创 深度学习:位置前馈神经网络

是 Transformer 模型中的一个重要组件。位置前馈神经网络在每个位置上独立地对输入进行处理,通常由。每个位置上的输入数据独立地通过位置前馈神经网络进行处理,从而捕捉每个位置的局部特征。通过两个全连接层和中间的 ReLU 激活函数,引入非线性变换,增强模型的表达能力。将输入特征映射到隐藏层特征,再映射到输出特征,实现特征的变换和提取。

2024-11-20 16:05:36 488

原创 深度学习:ResNet每一层的输出形状

nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3):将输入的 1 个通道扩展为 64 个通道,特征图的尺寸从 224x224 变为 112x112。特征图尺寸减半的原因是为了在增加网络深度的同时,减小特征图的尺寸,从而减少计算量和参数数量,同时增加感受野,提高网络的性能和效率。解释:resnet_block(64, 128, 2):包含两个残差块,输入通道数为 64,输出通道数为 128,特征图的尺寸减半(56x56 -> 28x28)。

2024-11-20 11:35:18 1204

原创 深度学习:循环神经网络的计算复杂度,顺序操作和最大路径长度

当更新循环神经网络的隐状态时,d × d权重矩阵和d维隐状态的乘法计算复杂度为O(d2)。假设 W 的大小为 d×d,h(t−1)的大小为 d,那么乘法的计算复杂度为 O(d2)。对于长度为 n 的序列,隐状态的更新需要进行 n 次。每次更新都需要进行 Wh(t−1)的乘法操作,因此总的计算复杂度为 O(nd2)。每个时间步的隐状态依赖于前一个时间步的隐状态,因此无法并行化。h(t−1)是时间步 t−1的隐状态,大小为 d。W是隐状态到隐状态的权重矩阵,大小为 d×d。h(t) 是时间步 t 的隐状态。

2024-11-18 11:29:20 610

原创 深度学习:卷积神经网络的计算复杂度,顺序操作,最大路径长度

在深度学习中,卷积层的计算复杂度主要取决于卷积核的大小、输入和输出的通道数量、以及输入序列的长度。具体来说,卷积层的计算复杂度可以通过以下几个因素来计算:卷积核大小 k:卷积核的大小决定了每次卷积操作需要计算的元素数量。输入通道数量 d:输入通道数量决定了每个位置需要进行的卷积操作的数量。输出通道数量 d:输出通道数量决定了需要进行的卷积操作的总次数。输入序列长度 n:输入序列长度决定了卷积操作的次数。输出通道数量 d 是指卷积层输出的特征图的数量。

2024-11-18 10:47:21 840

原创 numpy中的transpose()和pytorch中的permute()

功能相似:numpy.transpose 和 torch.permute 都用于重新排列数组或张量的维度。默认行为:numpy.transpose:如果没有指定 axes 参数,默认反转所有维度。torch.permute:必须显式指定新的维度顺序。使用方式:numpy.transpose:通常用于 numpy 数组。torch.permute:通常用于 torch 张量。numpy.transpose 和 torch.permute 在功能上相似,都用于重新排列数组或张量的维度。

2024-11-15 15:50:11 943

原创 深度学习:transpose_qkv()与transpose_output()

transpose_qkv 函数通过以下步骤将输入张量重新排列,使其适合多头注意力的计算:将 num_hiddens 维度拆分成 num_heads 个头。交换维度,使得每个头的数据连续排列。合并 batch_size 和 num_heads 维度,使得每个头的数据连续排列。最终,transpose_qkv 函数返回形状为 (batch_size * num_heads, seq_len, num_hiddens // num_heads) 的张量,以便进行多头注意力计算。

2024-11-15 11:35:17 985

原创 深度学习:广播机制

广播机制通过自动扩展较小的张量来匹配较大张量的形状,从而使得逐元素操作能够顺利进行。这种机制避免了显式地扩展张量的维度,提高了代码的简洁性和效率。

2024-11-13 20:49:11 718

原创 深度学习:nn.Linear

通过 nn.Linear(key_size, num_hiddens),键被映射到一个新的维度空间,即每个键被转换为一个形状为 (num_hiddens,) 的向量。输出:经过线性变换后,K_transformed 的形状为 (2, 5, 128),表示每个键被映射到了 128 维的隐藏层空间。输入:键张量 K 的形状为 (2, 5, 64),表示批量大小为 2,序列长度为 5,每个键的维度为 64。假设键(key)的维度为 key_size,即每个键是一个形状为 (key_size,) 的向量。

2024-11-12 11:31:57 588

原创 深度学习:掩蔽softmax

假如valid_lens=tensor([2, 3, 1])shape[1]为3(即第一个样本每一行的有效长度为2,第二个样本每一行有效长度为3,第三个样本每一行有效长度为1),通过代码valid_lens将会变为tensor([2, 2, 2, 3, 3, 3, 1, 1, 1])即有效长度成功扩展到每个位置。valid_lens = valid_lens.reshape(-1): 将 valid_lens 展平为一维张量,形状为 (batch_size * sequence_length,)

2024-11-12 11:05:02 782

原创 区块链:Raft协议

是一种,这种机制适用于网络中存在一定数量的故障节点,但不考虑“恶意”节点的情况,所以更适合作为私有链和联盟链的共识算法。

2024-11-08 10:43:44 1245

原创 axis 参数的方向

即沿着行相加,sum也就等于每一列上所有行相加(即沿着行方向对列进行操作)即沿着列相加,sum也就等于每一行上所有列相加(即沿着列方向对行进行操作)

2024-11-01 20:28:09 436

原创 函数reshape()与transpose()与repeat()

reshape 是 NumPy 库中的一个函数,用于改变数组的形状(shape)而不改变其数据。换句话说,reshape 函数可以让你在不改变数组元素的情况下,重新排列数组的维度。或者[[1 2 3][4 5 6]]reshape 函数中的 -1 是一个占位符,表示“自动计算”。具体来说,-1 会根据数组的总元素数量和另一个维度的大小来自动计算出合适的维度大小。[[1 2 3][4 5 6]]在这个例子中,-1 表示自动计算第二维的大小,使其与第一维 2 相乘后等于数组的总元素数量 6。

2024-10-31 18:48:59 656

原创 深度学习:卷积神经网络中的im2col

第二行为 2,3,4,6,7,8,10,11,12,18,19,20,22,23,24,26,27,28,34,35,36,38,39,40,42,43,44 即第二次卷积运算所涉及到的输入数据。第一行为 1,2,3,5,6,7,9,10,11,17,18,19,21,22,23,25,26,27,33,34,35,37,38,39,41,42,43 即第一次卷积运算所涉及到的输入数据。在传统的卷积操作中,卷积核(滤波器)在输入图像上滑动,逐个计算每个位置的卷积结果。若是批大小为10,即保存10倍的数据。

2024-10-31 17:05:07 1654 1

原创 np.random.rand()与np.random.uniform()

np.random.uniform 更加灵活,可以生成任意指定范围内的随机数数组。np.random.rand 适用于快速生成 [0, 1) 范围内的随机数数组。

2024-10-31 11:26:32 1156 1

原创 深度学习:抑制过拟合

反向传播时的行为和ReLU相同。正向传播时没有传递信号的神经元,反向传播时信号将停在那里。1.过拟合:当模型在训练数据上表现很好,但在未见过的测试数据上表现较差时,我们称之为过拟合。2.权重过大:在过拟合的情况下,模型可能会过度依赖某些特征,导致某些权重变得非常大。这些大的权重会使模型对训练数据的微小变化非常敏感,从而在测试数据上表现不佳。通过在学习的过程中对大的权重进行惩罚,来抑制过拟合。例如为损失函数加上权重的平方范数(即L2正则化或权重衰减)是一种常见的正则化技术,用于抑制权重的变大。

2024-10-28 20:48:51 1354

原创 深度学习:权重参数相关知识(深度学习入门:基于Python的理论与实现 (斋藤康毅)))

与前一层有n个节点连接时,初始值使用标准差为 的分布n 个节点使用标准差为 1/根号n 的高斯分布进行初始化使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小)。第一点,权重初始值不能设置为0,严格说权重初始值不能设为同样的值,是因为在误差反向传播法中,所有权重值都会进行相同的更新(参考我的博客:“深度学习:简单计算图的反向传播传递导数计算”中乘法节点反向传播的规则),所以。第三点,若设定了合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进行学习。

2024-10-28 18:43:25 780

原创 深度学习:SGD的缺点

在给定的函数 f=120(x2)+y2f=201​(x2)+y2 中,梯度向量 ∇f=(x/10,2y)) 在不同点的方向是不同的。在 x轴方向上,梯度分量是 x/10,这意味着梯度在 x轴方向上的变化相对较小,因为 x的系数是 1/10​,这是一个较小的数。如果 η 较大,y轴方向上的移动会显著大于x 轴方向上的移动,导致点在 y轴方向上大幅移动,而在 x 轴方向上移动较小。在 y 轴方向上,梯度分量是 2y,这意味着梯度在 y轴方向上的变化相对较大,因为 y的系数是 2,这是一个较大的数。

2024-10-25 17:45:42 1200

原创 深度学习:匿名函数lambda函数的使用与numerical_gradient函数

(f(x+h) - f(x-h))/2*h计算梯度,而由于匿名函数有更新参数的作用,所以当x=self.params[‘W1’]时,计算f(x+h)本例即匿名函数loss_W时会自动将模型中的self.params[‘W1’]=self.params[‘W1’]+h,作用就是匿名函数返回的self.loss(x, t)调用的predict函数里的对应参数会相应更新,这样即可获得在更新后的W1条件下对应的predict输出值从而计算loss。下面的numerical_gradient函数是调用上面函数的。

2024-10-24 16:28:06 959

原创 深度学习:简单计算图的反向传播传递导数计算

从这个结果中可知,“支付金额关于苹果的价格的导数”的值是2.2。∂支付金额/∂苹果总价 * ∂苹果总价/∂苹果单价+ ∂支付金额/∂消费税 * ∂消费税/∂苹果总价 * ∂苹果总价/∂苹果单价 = 1 * 2 + 1 * 0.1 * 2 = 2.2 这是正常算法。而一开始的问题中求“支付金额关于苹果的价格的导数”“支付金额关于苹果的个数的导数”“支付金额关于消费税的导数”。从这个结果中可知,“支付金额关于苹果的价格的导数”的值是2.2。苹果总价是2个苹果的价格之和,所以苹果总价关于苹果价格的导数是2。

2024-10-21 21:39:01 534

原创 深度学习:简单计算图的反向传播传递导数计算

从这个结果中可知,“支付金额关于苹果的价格的导数”的值是2.2。∂支付金额/∂苹果总价 * ∂苹果总价/∂苹果单价 + ∂支付金额/∂消费税 * ∂消费税/∂苹果总价 * ∂苹果总价∂苹果总价 =∂支付金额/∂苹果总价 + ∂支付金额/∂消费税 * ∂消费税/∂苹果总价 = 1 + 0.1 = 1.1。苹果总价是2个苹果的价格之和,所以苹果总价关于苹果价格的导数是2。支付金额是苹果总价加上消费税,所以支付金额关于消费税的导数是1。消费税是苹果总价的10%,所以消费税关于苹果总价的导数是0.1。

2024-10-19 11:19:09 355

原创 区块链(simachain):UTXO中的Vout的to_addr(未解决)

zhangsan.get_unconfirmed_utxo() 获取的 UTXO 的 to_addr 是 zhangsan 的地址,因为这些未确认的 UTXO 是作为交易的输入(Input)被引用的。因为它们不是张三可以花费的UTXO,这些输出不会出现在张三的OWN_UTXO_SET中,所以张三的to_addr指向自己。当 zhangsan 创建一笔交易时,他引用自己的钱包中的 UTXO 作为输入(Input),这些 UTXO 的 to_addr 是 zhangsan 的地址。

2024-10-17 19:22:21 360

原创 深度学习:损失函数——交叉熵误差

对于 one-hot 编码的 t,只有真实类别的标签值为1,其他类别的标签值为0,因此只有真实类别的对数概率会被保留。当t标签以[2,7,0,9,4]存储时,y[np.arange(batch_szie), t] 会生成[y[0,2], y[1,7], y[2,0],y[3,9],y[4,4]]由于只有真实类别的对数概率会被保留,因此这个求和实际上是计算真实类别的对数概率的总和。例如,对于第一个样本:t[0] * np.log(y[0] + 1e-7) 会保留第三个类别的对数概率,其他类别的对数概率为0。

2024-10-17 11:55:42 461

原创 区块链(simchain):交易中的输出单元Vout

def pubkey_script(self): 方法生成一个包含比特币脚本操作码的字符串,用于验证交易输出中的接收地址和签名。“OP_DUP OP_ADDR {0} OP_EQ OP_CHECKSIG” 是一个模板字符串,其中 {0} 是一个占位符,表示将要被替换的部分。format(self[0]) 将 self[0] 的值插入到模板字符串中的 {0} 位置。这个脚本通常用于验证交易输出是否有效,确保接收地址是正确的,并且签名是有效的。

2024-10-15 15:44:17 289

原创 wsl2(ubuntu)中运行MPI程序

在MPI(Message Passing Interface)程序中,MPI_Init、MPI_Comm_rank和MPI_Comm_size是三个常用的函数,用于初始化MPI环境、获取当前进程的标识符(rank)以及获取总进程数(size)。在MPI程序中,每个进程计算自己的局部和(local_sum),然后通过MPI_Reduce函数将所有进程的局部和汇总成一个全局和(global_sum)。MPI_COMM_WORLD是MPI预定义的通信域,包含了所有参与MPI计算的进程。

2024-10-14 17:23:45 2199

原创 区块链(simchain):HD钱包“种子”生成密钥

key 是用于生成 HMAC 的密钥。在这个例子中,密钥是字节串 b’Simchain seed’。这个密钥是固定的,用于确保生成的派生密钥的一致性和安全性。msg 是输入的消息,用于生成 HMAC。在这个例子中,消息是 master_seed,即之前生成的 32 字节随机种子。digestmod 是用于生成哈希的算法。在这个例子中,使用的是 SHA-512 算法,它生成一个 512 位的哈希值。.digest():digest() 方法返回生成的 HMAC 的二进制格式。

2024-10-11 20:35:15 578

原创 区块链(simchain):公钥转换为地址

上述地址生成采用与比特币一样的算法,即对公钥宇节串进行两次哈希运算,分别采用sha256 ripemd160 哈希算法,得到 160 位的公钥哈希值,然后在其前加上 一个字节的地址版本信息\x00 ,得到一个 21 字节的字节串。在这个上下文中,new(‘ripemd160’, sha) 表示创建一个 RIPEMD-160 哈希对象,并用之前得到的 SHA-256 哈希值 sha 初始化该对象。获取哈希结果:使用 digest() 方法获取最终的哈希值。创建哈希对象:使用特定的哈希算法创建一个哈希对象。

2024-10-10 11:44:22 698

原创 区块链(python)第二个问题:python中实例方法里的参数传不进去

又尝试n1.print_tuple([1,2])也是报同样的错误TypeError: print_tuple() takes 1 positional argument but 2 were given。如果你在类中定义一个方法,并且第一个参数不是 self,那么这个方法不会自动绑定到当前对象。例如,t.print_tuple() 实际上等价于 t.print_tuple(t)。即方法中a被自动传递为当前对象,若想n1.print_tuple([3,4])当前对象被传递到self即可成功打印列表a。

2024-10-03 17:08:33 367

原创 区块链(python)第一个问题:python中的__new__

不可变对象初始化:对于像 tuple 这样的不可变类型来说,一旦创建后就不能修改其内容,因此所有的初始化工作必须在。问题二:super(NewTuple, cls)中的参数为什么又有NewTuple又有cls,它俩不是一个意思吗?(tuple, iterable) 来创建一个新的 tuple 对象,然后调用。在这个例子中,我们定义了一个继承自 tuple 的子类 MyTuple,并在。之前被调用的,它的主要职责是为对象分配内存,并返回这个新创建的对象实例。方法是一个特殊的方法,它用于创建一个类的实例。

2024-10-03 16:29:25 644

原创 MySQL第十个问题 set 类型添加注意

INSERT INTO t7(email, address, work_place) VALUES (‘zhangsan@atguigu.com’, ‘北京市昌平区’, ‘work_place SET(‘北京’, ‘上海’, ‘广州’, ‘深圳’) NOT NULL DEFAULT ‘北京’报错 Data truncated for column ‘work_place’ at row 1。选择集合的多个值时,一定要注意值之间不要有空格!

2024-09-26 09:10:49 216

原创 MySQL第九个问题 有自增的记录添加不上?

答案:大家一定不要忘记在添加记录时 设置为自增的那个字段 要是它不是默认值的话一定要记得加上它!而且一定要注意看报错内容,明明说得很明白就是列的数量和值的数量不一样(哭,我没有仔细看,导致我花了好长时间才解决)报错[21S01][1136] Column count doesn’t match value count at row 1。) VALUES (‘张三’), (‘李四’), (‘王五’);) VALUES (NULL,‘赵都是’);) VALUES (NULL,‘赵都是’);

2024-09-24 17:04:06 190

原创 MySQL 天数差

如果需要更详细的时间间隔信息,则可以考虑使用减法运算。这种方式返回的结果是一个 INTERVAL 类型,包含了日期差值以及单位信息(如天数、月数等)。DATEDIFF(CURDATE(), birthday) 返回的是两个日期之间的天数差。(CURDATE() - birthday) 同样可以用来计算两个日期之间的差距。这个函数专门用于计算两个日期之间的差异,并返回一个整数值。减法运算返回的是一个包含更多时间单位信息的间隔对象。DATEDIFF 只返回天数差,结果是一个整数。返回的结果是不一样的!

2024-09-20 11:21:59 487

原创 MySQL第八个问题 使用group by报错sql_mode=only_full_group_by

当你有一个表,并且你想基于某些列进行分组,但同时又想选择那些没有包含在 GROUP BY 子句中的其他列时,可以使用 ANY_VALUE() 来避免错误。在 MySQL 中,ANY_VALUE() 是一个聚合函数,用于返回被聚合的第一行的列值。当查询结果只需要一行记录,并且不需要保证特定的值时,可以使用 ANY_VALUE()。ANY_VALUE() 返回的是分组中的任意一个值,不一定是第一个或最后一个。解决办法:上网上查询了下any_value()函数可以解决,将代码改为。

2024-09-19 20:11:54 616

原创 MySQL第七个问题 右连接

问题二:代码是对于t_job表和t_department表是右连接,但是为什么在下图中倒数第二行只有部门id不为空(姓名什么的其他字段都为空目的是验证右连接)的那条记录成功显示了,而最后一行只有job_id不为空的那行记录没有成功显示呢?只成功显示了t_department的右连接?job_id=3在t_job中是有对应记录的,下图。最后一行的did就为空了呢?问题一:上述代码显示。但是为什么将代码改成。

2024-09-19 12:09:07 375

原创 MySQL第六个问题 REGEXP、LIKE不区分大小写?

SELECT ENAME, EMAIL FROM t_employee WHERE email REGEXP '\d’返回结果不一样呢;问题:为什么SELECT ENAME, EMAIL FROM t_employee WHERE email REGEXP ‘\D’;查询 SELECT ENAME, EMAIL FROM t_employee WHERE email REGEXP ‘\D’;在正则表达式中,\ 表示转义字符,D 表示非数字字符(即除了数字0-9以外的任何字符)。

2024-09-12 15:03:01 497

原创 MySQL第五个问题 CAST(待解决)

问题:为什么SELECT * FROM t6_binary WHERE b1 = ‘a’;背景:CREATE TABLE t6_binary(通过CAST函数将二进制字符串显示为文本字符串。b2不是已经转换为字符串了吗?

2024-09-10 11:27:34 232

原创 MySQL第四个问题 int(M)问题

解答:问GPT说是 MySQL 实际显示可能会受不同的配置和版本影响?有些懒得换版本尝试,先挖个坑,后续再解决,希望有大佬可以解救我。为什么num2宽度不是3位而是十位?背景:CREATE TABLE t2_int(为什么num2不是显示1314?按照理论来说应该显示两行下图的。依旧显示的是INT默认宽度10。继续尝试,添加1314。

2024-09-08 19:40:39 436 4

原创 MySQL第三个问题 SET AUTOCOMMIT = 0

解答:理解错误,在一个事务内运行结果是会改变的,但是写rollback的话再select。问题:为什么SET AUTOCOMMIT = 0;未在程序中运行commit。说明SET AUTOCOMMIT = 0后面的添加删除操作都被提交了?则会回到设置SET AUTOCOMMIT = 0前的表的状态;说明SET AUTOCOMMIT = 0后的语句被提交表被改变。而运行commit的话再select则。下面的操作还是被自动提交了呢?

2024-09-08 17:43:14 501

原创 MySQL第二个问题 insert into

初步想法:要是想使用完全不指定字段名的方式插入记录,一定要保证插入的列数与表的列数完全一致(看网上有的人因为有某一列是自增的忘记插入自增的那一项的值,也和我报同样的错误),所以我这个插入是否只能用指定所有字段名来插入记录呢?报错Column count doesn’t match value count at row 1;但是INSERT INTO tb_student(SID, SNAME, CHINESE, MATH, ENGLISH) VALUES (2, ‘SDS’, 88, 99, 96);

2024-09-08 17:24:43 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除