在Task2中,对深度学习的概念和一般步骤有了一定了解。
深度学习概念
深度学习是机器学习的分支,二者在特征的处理上有明显区别。
机器学习需要对特征进行预处理,即“特征工程”。而深度学习在神经网络的架构中,自动学习有用的特征。深度学习模型能实现端对端的学习,即由输入直接得到输出,无需中间步骤。
深度学习的应用:ChatGPT
深度学习局限性:不能解决所有问题。需要大量的高质量数据来训练模型。
深度学习的一般步骤
- 准备小批量数据,以及对应的正确标签
- 将模型设置为训练模式
- 将训练数据输入到神经网络中,计算网络的输出(前向传播)
- 用损失函数计算当前数据预测结果与真实标签的差异,即损失(计算损失)
- 通过反向传播计算每个参数的梯度(反向传播)
- 根据梯度,更新神经网络参数(参数更新)
- 多次迭代以上步骤,更新参数(多轮迭代,epoch)
深度学习与迁移学习
迁移学习是一种机器学习技术,将已经从一个任务上学习到的知识(模型参数、特征表示等)应用到另一个相关任务上。这种技术对于数据稀缺的情况也能表现出色,特别有用。
通常使用在大规模数据集上预训练的模型作为起点,比如在ImageNet数据集上预训练的卷积神经网络(CNN),在这个模型基础上,用少量标记数据对模型进行微调,就可能适应新任务。
ImageNet包含超过1400万张注释过的图像,是深度学习模型训练和评估的理想数据集。用其训练出的模型具有鲁棒性。用在这个数据集上训练好的模型作为起点,在新任务中再微调参数,通常可以有出色的表现。baseline中就用了这种迁移学习的方法:
import timm
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()
第二行,就用了"resnet18'这个预训练好的神经网络模型,"pretrained=True"表示使用在ImageNet上预训练的权重,num_classes=2
表示模型的输出层被修改为有2个类别的输出,以适应二分类任务,通过model = model.cuda()
将模型移动到GPU上进行加速。
常见的图像分类网络
- AlexNet,https://en.wikipedia.org/wiki/AlexNet
-
ResNet,https://en.wikipedia.org/wiki/Residual_neural_network
-
EfficientNet,https://paperswithcode.com/method/efficientnet
jupyter notebook问题小结
为了节省免费时长,我将示例代码https://www.kaggle.com/code/finlay/deepfake-ffdi-ch2/下载到了本地,用jupyter notebook运行,但运行过程中有一些报错,总结如下:
1. torch库报错
这一块会报错 "torch has no attribute tensor",后来发现是jupyter notebook自带的kernel有问题,更改为电脑本地的python.exe就没有问题了,更改kernel方法如下:
2. matplotlib报错
红色为报错,绿色是解决方案
3. wget报错
方法如下:
bxxDebug | ‘wget‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。_wget' 不是内部或外部命令,也不是可运行的程序 或批处理文件。-CSDN博客