李宏毅机器学习 hw11 boss baseline分享

hw11

代码

任务描述

在这里插入图片描述
给定真实的图片(有label)和手绘图片(无label),使用领域适应技术来预测绘画图片的类别。
我们采用的模型结构如下:
在这里插入图片描述
模型由三部分组成,首先是特征提取器Feature Extractor)负责提取出两个领域的图片所具有的共同特征,标签预测器Label Predictor)负责对提取出的共同特征进行正确的分类,最后是领域分类器Domain Classifier)负责判断提取的特征是属于哪一个领域的,与特征提取器进行对抗训练。
代码的大致框架助教已经帮我们写好了,我们要做的就是在已有结构上进行调整,提高正确率,同时,助教还给我们提供了训练的曲线,如图
在这里插入图片描述
从这个曲线我们可以得到两点信息:

  1. 当训练正确率已经过拟合时,你也不要停止训练,因为从图中可以看到此时测试集的正确率其实还在提高。
  2. 领域分类器的正确率整体上一直在下降,最后下降到0.5左右才算是一个好的结果,这说明它就是完全随机分的,根本不能成功区分特征了,说明特征提取器已经达到了很好的效果。

实验要求

在这里插入图片描述

Strong baseline

  1. 增大epochs 200->3000
  2. 根据DANN的论文动态调整 λ \lambda λ
    λ = 2 e − 10 e p o c h / e p o c h s + 1 − 1 \lambda = \frac{2}{e^{-10epoch/epochs}+1}-1 \quad λ=e10epoch/epochs+121
    画出来的曲线如图:
    在这里插入图片描述
    标签预测器和特征提取器是放在一起训练的,其中标签预测器的loss为loss1,领域分类器的loss为loss2,
    总的 l o s s = l o s s 1 − λ l o s s 2 loss=loss1 -\lambda loss2 loss=loss1λloss2
    λ \lambda λ刚开始时很小,模型主要训练标签预测器使souce domain提取的特征能够被很好预测,后面 λ \lambda λ逐渐增大,强调领域分类器的loss,即特征提取器要能够骗过领域分类器,将target domain的特征拉到与souce domain一样的空间,从而保证正确率。
    提交结果如下:
    在这里插入图片描述
    已经过了boss baseline,但是只过了一点,还能再提高!

Boss baseline

使用strong baseline得到的模型对target图片生成伪标签(pseudo-label)。为保证伪标签的可靠性,所产生的伪标签概率高于0.95才会被使用,然后用生成的伪标签来训练student net(初始时student net 和 teacher net都是strong baseline得到的模型),而teacher net 的更新较慢每一个epoch更新一次,teacher net网络权重中0.9的权重来自于自己,0.1的权重来自于更新后的student net。
训练400个epoch。提交得到的结果如下:
在这里插入图片描述
提高了1.5个百分点左右,生成伪标签的技巧是打榜冲刺阶段很常用的技巧,可以了解一下!

### 李宏毅机器学习 Homework 1 资源与解决方案 对于李宏毅机器学习课程中的第一个作业,主要集中在线性回归方面的工作。该作业旨在帮助学生理解和实现线性回归模型,并通过实际数据集的应用来巩固理论知识[^3]。 #### 线性回归简介 线性回归是一种用于预测连续型变量的方法,在监督学习框架下工作良好。给定一组训练样本 \((x^{(i)}, y^{(i)})\) ,其中 \(x^{(i)}\) 表示特征向量而 \(y^{(i)}\) 是目标值,线性回归试图找到一个最优的参数集合 \(\theta\) ,使得预测值尽可能接近真实标签。具体来说,就是最小化损失函数: \[ J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \] 这里 \( h_\theta(x) = \theta_0+\theta_1 x_1 + ... + \theta_n x_n \),即假设函数;\( m \) 则代表训练实例的数量。 为了完成这个任务,通常采用梯度下降法或其他优化算法来进行求解。以下是Python代码片段展示如何利用NumPy库构建简单的线性回归模型: ```python import numpy as np def compute_cost(X, y, theta): """ 计算代价函数J(theta). 参数: X : 输入矩阵 (m,n+1), 包含偏置项. y : 输出向量 (m,) theta : 参数向量 (n+1,) 返回: cost : 当前参数下的平均平方误差成本. """ m = len(y) predictions = X.dot(theta) square_errs = (predictions - y)**2 cost = sum(square_errs)/(2*m) return cost def gradient_descent(X, y, theta, alpha, num_iters): """ 使用批量梯度下降更新theta. 参数: X : 输入矩阵 (m,n+1), 包含偏置项. y : 输出向量 (m,) theta : 初始化后的参数向量 (n+1,) alpha : 学习率 num_iters : 迭代次数 返回: theta : 更新后的参数向量 (n+1,) j_history : 成本历史列表 """ m = len(y) j_history = [] for i in range(num_iters): predictions = X.dot(theta) errors_x1 = (predictions - y).dot(X[:,0]) errors_x2 = (predictions - y).dot(X[:,1]) theta[0][0] -= alpha * (1/m)*errors_x1 theta[1][0] -= alpha * (1/m)*errors_x2 j_history.append(compute_cost(X,y,theta)) return theta,j_history ``` 此部分代码实现了两个重要功能:计算当前参数设置的成本以及执行批处理形式的梯度下降以调整这些参数直到收敛为止。这正是Homework 1的核心内容之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值