- 博客(16)
- 收藏
- 关注
原创 实验18 优化算法比较
该算法的缺点是在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。输出图中不同颜色代表f(x1,x2)的值,具体数值可以参考图右侧的对应表,比如深粉色区域代表f(x1,x2)在0~8之间,不同颜色间黑色的曲线是等值线,代表落在该线上的点对应的f(x1,x2)的值都相同。如果最后输出的结果只有一个黑点,可能是因为在使用all_x存储时,x每次更新虽然都不相同,但是append的x.numpy()都引用了同于内存空间,导致all_x中的数据全部相同,可以使用。
2024-12-24 12:24:52
831
原创 实验16 循环神经网络(3)
对sequence_length进行扩展,变成(batch_size, 1)# 根据sequence_length生成mask矩阵# 对padding位置进行mask处理# 对序列中的向量取均值# 词典大小# 单词向量的维度# LSTM隐藏单元数量# 情感分类类别数量# 实例化嵌入层# 实例化LSTM层。
2024-12-16 21:46:20
1219
原创 实验15 循环神经网络(2)
LSTM层的代码与SRN层结构相似,只是在SRN层的基础上增加了内部状态、输入门、遗忘门和输出门的定义和计算。这里LSTM层的输出也依然为序列的最后一个位置的隐状态向量。# 声明LSTM和相关参数# 定义LSTM模型# 示例初始化输出值的精度上进行对比# 设置batch_size, seq_len, input_size, hidden_size# 创建一个随机数组作为测试数据,数据shape为batch_size x seq_len x input_size两者的输出基本是一致的。
2024-12-10 17:49:27
718
原创 实验14 循环神经网络(1)
可以看到经过学习率等方式的调整,梯度范数急剧变大,而后梯度范数几乎为0. 这是因为Tanh为Sigmoid型函数,其饱和区的导数接近于0,由于梯度的急剧变化,参数数值变的较大或较小,容易落入梯度饱和区,导致梯度为0,模型很难继续训练。由于在本任务中,输入序列的前两位数字为 0 − 9,其组合数是固定的,所以可以穷举所有的前两位数字组合,并在后面默认用0填充到固定长度. 但考虑到数据的多样性,这里对生成的数字序列中的零位置进行随机采样,并将其随机替换成0-9的数字以增加样本的数量.。当k=3时,生成训练集。
2024-12-09 17:54:21
970
原创 实验13 卷积神经网络(4)
预训练模型指的是已经在大规模数据集上训练过的模型,通常可以用于解决类似任务的不同问题。通过在大量数据上训练,预训练模型能够学习到通用的特征和模式,能够加速后续任务的训练过程。常见的预训练模型包括 GPT和 ResNet。预训练模型的优势在于它们通过学习到的知识为后续任务提供了良好的初始权重。预训练模型是使用已有的训练好的模型或权重进行推断或微调。比如使用CIFAR-10上预训练的 ResNet 模型重新对CIFAR-10进行图像分类。
2024-12-03 12:31:29
845
原创 实验12 卷积神经网络(3)
于是倒查了输入量,采用了其他的代码后发现我的代码初始化有问题,在第一维上的数据全部相同。在排除了这个错误并对数据重新进行[-1,1]的归一化之后,的数据任然得出了错误的结果。可以看出,不带残差连接的ResNet上,相较于LetNet而言,正确率并没有很大的提高,甚至不如LetNet的计算时间少。这个结果显然很奇怪啊,因此这里测试了预测值的大小,发现预测值全为9,首先推测是数据集初始化的问题。这里查询了在验证集上的logits的数值,也就是最后经过前向传播的输出值,发现他们在第一维上。
2024-11-26 17:19:51
1010
原创 实验11 卷积神经网络(2)
由于没有使用原来的代码,这里的运行结果有点不同,主要是没划分训练集和验证集。这里直接用1000个训练集训练的,每一批图片修改一次参数,因此十轮之后的迭代出的loss已经很低了。因为文件的开头可能会包含一些文件的信息,例如图像的宽高、颜色和每个像素的字节数,或者是样本的总数和类别。predicted里面是一个64个元素的向量,表示一个批次的预测标签。1.此处的np.frombuffer的offset参数之所以不同,是因为文件格式的定义不同。这里我们的批次设置为64,可视化一下一个批次中的图像。
2024-11-18 22:46:03
942
原创 实验10 卷积神经网络(1)
二维卷积算子def __init__(self, kernel_size, # weight_attr 权重# # 匹配kernel_size# 使用nn.Parameter创建可训练参数"""输入:- X:输入矩阵,shape=[B, M, N],B为样本数量输出:- output:输出矩阵"""# 遍历 X 的每个位置,使用卷积核 self.weight 进行卷积运算。
2024-11-12 17:13:38
712
原创 实验9 前馈神经网络(5)
每次迭代使用的是小批量数据,相较于批量梯度下降,减少了计算开销,尤其适用于大型数据集。同时小批量大小是小批量梯度下降的一个重要超参数,不同的超参数对于模型的训练效果有着较大的影响。torch.utils.data是用来封装 Dataset的方法和行为的抽象类,通过一个索引获取指定的样本,同时对该样本进行数据处理。由于这里使用随机梯度下降法对参数优化,所以数据以批次的形式输入到模型中进行训练,那么评价指标计算也是分别在每个批次进行的,要想获得每个epoch整体的评价结果,需要对历史评价结果进行累积。
2024-11-05 17:07:23
1021
原创 实验8 前馈神经网络(4)
总的来说,sigmoid其实并不是一个非常好的损失函数,由于使用链式法则计算梯度,Sigmoid 函数的导数在输入值接近其饱和区域时非常小,导致整个链的梯度乘积变得非常小,输出被压缩到 (0, 1) 区间内,限制了网络表达能力。在实际的训练中,当训练轮次足够大的时候,第一层的梯度会趋近于0,几乎消失。在训练过程中,如果参数在一次不恰当的更新后,某个ReLU神经元在所有训练数据上都不能被激活(即输出为0),那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远都不能被激活。
2024-11-05 16:02:40
984
原创 实验7 前馈神经网络(3)
使用pytorch的预定义算子来重新实现二分类任务。# 使用'torch.nn.Linear'定义线性层。# 其中第一个参数(in_features)为线性层输入维度;第二个参数(out_features)为线性层输出维度# weight_attr为权重参数属性,这里使用'torch.nn.init.Normal'进行随机高斯分布初始化# bias_attr为偏置参数属性,这里使用'torch.nn.initializer.Constant'进行常量初始化。
2024-10-26 18:02:42
925
原创 实验6 前馈神经网络(2)
与第3章中实现的梯度下降优化器SimpleBatchGD不同的是,此处的优化器需要遍历每层,对每层的参数分别做更新。该算子计算的是上一层到下一层的净活性值,同时继承了Op父类,既有反向传播算法也有前向传播算法。,上图表示了该类中各算子的用处,和实际计算的数据内容。这里计算的是每一层的活性值, 同样继承了Op父类,有反向传播和前向传播算法。为了更高效的构建前馈神经网络,我们先定义每一层的算子,然后再通过算子组合构建整个前馈神经网络。可以看出来,这是一个性质非常好的函数,计算时的梯度明显且计算公式简单。
2024-10-22 17:16:08
1143
原创 实验5 前馈神经网络(1)
查看z的数据类型时显示的是torch.Tensor,而其中的数据类类型是torch.float32,也就是说,与手动计算时求出的数据类和数据类类型完全一致。值得注意的是,leaky_relu函数多了一个属性:negative_slope,当这个值没有定义时,它的函数图像无限趋近于Relu函数。使用pytorch计算一组输入的净活性值z,净活性值z经过一个非线性函数f(·)后,得到神经元的活性值a。以下是坐标轴未移动的示意图, 显然,上述代码移动了左侧和下方的坐标轴,并隐藏了右侧和上方的坐标轴。
2024-10-11 17:10:09
920
原创 实验4 线性分类
不同于线性回归直接通过最小化误差计算权重和偏置的方法,在本实验中将对Logistics回归中的参数进行反向传播,计算参数的偏导数,通过偏导数来优化参数,反复循环几次,直到评价指标(比如预测准确率)足够大,以减小损失。具体表现在,在Logistics回归模型中加入一个反向传播函数,利用模型中当前的参数和输入的数据集计算当前的梯度。损失函数计算了预测值和实际值之间的差别, 反应了当前模型与数据的拟合程度,也就是风险的大小。在这里,优化模型意味对权重和偏置的优化,第一步就是计算这两个参数的梯度。
2024-10-08 16:42:21
1104
原创 实验3 基于线性回归的波士顿房价预测
pass# 函数未实现# 输出对inputs的梯度inputs_gradsself.x = xself.y = yself.x = xself.y = yself.x = x可以看到这里父类的__call___函数返回了forward前向传播函数,所以当使用Op类的实例变量model时,可以直接使用model(inputs)调用model.forward(inputs)函数。# 输入模型要处理数据的特征长度# 模型参数。
2024-09-22 16:24:30
1396
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人