何为转置卷积?
正如你所熟知的那样,卷积操作可以从特征图中提取信息,并且经过卷积的特征图的尺寸会变小或者不变。
那么问题来了,如果我想让特征图尺寸变大(即对特征图进行上采样),应该怎么做呢?
一种方法是,直接做插值操作,从而完成对特征图的上采样。
这的确可以,但是,这种上采样的过程中不包含可学习的参数,所以,一个想法冒出:可不可以也通过具有可学习参数的卷积操作实现对特征图的上采样呢?
这就引出了今天的主角:转置卷积。
什么是转置卷积以一维卷积为例,对于一个5维向量$x=[x_1,x_2,x_3,x_4,x_5]$,使用kernel_size为3的卷积核$W=[w_1,w_2,w_3]$做卷积操作,根据卷积后的特征图尺寸计算公式(默认步长为1,不加padding,不加dialation,不做分组)$$\frac{n-f+2p}{s}+1$$
可计算得到输出特征图(一维向量)的维度是$(5-3+2*0)/1+1=3$,不妨记输出向量为$z=[z_1,z_2,z_3]$.
事实上,上述操作在计算机中是以矩阵乘法的形式实现的。具体地,根据卷积核写出对应的Toeplitz矩阵,至于这是个啥,这里可以先不做了解 ...
电子商务AI算法大赛Top2方案分享
上一次,我们介绍了电子商务AI算法大赛中我个人的解决方案。虽然在经过一顿操作后,线上分数得到了肉眼可见的提升,但相比于大佬们的成绩还是差了亿点点的
所以呢,这次来解读top2选手的解决方案,从优秀开源代码中学习思路,积累经验。
关于赛题的介绍以及数据集说明,可以回看上一篇文章哈:xxxxxx
线下验证方案date字段代表的是第几天,训练集中date的取值范围是从1 到116,共116天;测试集中date的取值范围是117到123共7天。于是从训练集中划出最后7天的数据作为验证集进行线下验证:
而在最终提交时,取消验证集,用全部训练数据进行训练:
数据集划分代码如下:
123456def split_dataset(data, valid_start_date, gap): train = data[data['date']<valid_start_date].copy() valid = data[(data['date']>=valid_start_date)&(data['date']& ...
电子商务AI算法大赛baseline
目录抢先看:[TOC]
赛题背景随着电子商务与全球经济、社会各领域的深度融合,电子商务已成为我国经济数字化转型巨大动能。庞大的用户基数,飞速发展的移动互联网行业,balabalabala……
本次比赛提供消费门户网站“什么值得买”2021年1月-2021年5月真实平台文章数据约100万条,旨在根据文章前两个小时信息,利用当前先进的机器学习算法进行智能预估第三到十五小时的文章产品销量,及时发现有潜力的爆款商品,将业务目标转化成商品销量预测,为用户提供更好的产品推荐并提升平台收益。
赛题地址: https://www.automl.ai/competitions/19#home
数据介绍赛题数据包含以下部分:
1234- train.csv #训练数据- test.csv #测试数据- sample_submission.csv #样例预测文件- sample_submission.csv.zip #样例提交文件
数据集所含字段如下:
1234567891011121314151617181920212223242526字段名称 字段类型 字段说明 article_id int 文 ...
推荐模型:从逻辑回归到POLY2到FM再到FFM
无论是基于内容的推荐算法,还是协同过滤算法,它们都只用到了用户和物品之间的行为信息,所以能不能加入更多的信息,比如用户/物品本身的信息以及上下文信息来更好地指导推荐呢?
事实上,这正在把推荐问题转化为我们所熟悉的机器学习问题。具体来讲,给定训练集,利用训练集的特征和标签训练一个模型,然后用该模型指导推荐。
在之前讲解的协同过滤算法中,我们通常是预测某用户对于某些物品的打分,然后按照打分值从高到低排列物品,选择前几个推荐给用户。
而这里,训练好的模型会直接预测某用户是否会对物品产生正反馈(比如购买一件商品,观看一部电影等),若会,则将物品推荐给该用户。没错,这就是一个二分类问题。
接下来介绍几个经典的相关模型,有一些可能已经听说过,比如逻辑回归,嗯,就从它开始吧~
逻辑回归逻辑回归(Logistic Regression, LR)用于分类任务,它使用sigmoid函数,将取值范围为全体实数的线性回归表达式$w_1x_1+w_2x_2+…+w_kx_k+b$映射到0和1之间:
123z=np.array(range(-10,10))sigm=1/(1+pow(2.73,-z))plt.pl ...
当SVD遇见CF
在之前的协同过滤算法中,我们使用了共现矩阵:
共现矩阵中每一个元素是特定用户对于特定物品(这里是电影)的打分。
但这存在一个问题:算法头部效应较明显,导致模型泛化能力较弱。具体来说,热门物品容易跟大量物品产生相似性,而尾部的物品由于其特征向量较稀疏,很少与其它物品产生相似性,从而很少被推荐。
一种比较好用的方法是,通过矩阵分解技术获取隐向量,用更稠密的隐向量来替代之前共现矩阵中对应的行(用户)和列(物品)组成的向量,从而加强了协同过滤模型处理稀疏矩阵的能力,提升了模型的泛化能力。
矩阵分解方法较多,比如梯度下降,SVD等.
隐向量的维度可自行设定或根据一定的规则确定(稍后就会看到),每一个维度都代表一种具体的含义。比如在之前举过的栗子中,每部电影的特征由一个二维向量来表示,两个维度分别代表了该电影中爱情元素和动作元素的含量;同样,每个用户也由一个二维向量来表示,两个维度分别代表该用户对于爱情元素和动作元素所喜爱的程度。其中所提及的二维向量,本质上就是隐向量。
回忆一下,在上面的栗子中,我们采用了梯度下降的方法来获取隐向量。
在接下来,你将看到另一种获取隐向量的方法:奇异值分解(SVD) ...
用Python搭建一个课程推荐系统:基于协同过滤算法
本文分享一个开源项目:课程推荐系统。
项目地址见文末参考资料[1].
该项目基于协同过滤算法,输入要预测的用户id以及要推荐的课程总数,输出推荐结果。
整个项目将使用Flask框架进行部署。
代码结构
主要逻辑在generator.py中,与其并列的testing.py作测试用,其余文件都是些工程上的代码(内存占用优化,日志文件处理,前端展示)。
数据处理原数据是日志文件,作者已经针对这些日志文件做了处理(使用Input Preprocessing中的模块),并提供了处理好的数据(.csv),因此这一步可以忽略。
读取处理后的数据:
12import pandas as pddf=pd.read_csv('features_sample.csv')
共49205条这样的数据,除了前两列用于标识不同课程和用户外,其余列均为特征列。
值得注意的是,对于前面两列,不同行可能有相同的取值。这是因为某一课程通常会被多个用户观看,且某个用户通常会观看不止一门课程。
代码解读在generator模块中,作者定义了一个recommendationGenerator类,它接收两个参 ...
用Python搭建一个电影推荐系统
之前我们以电影推荐为例,介绍了基于内容的推荐算法。可能各位看的有些枯燥,没关系,现在来做点有趣的事情:动手去实现它!
查看数据集使用的数据集是Kaggle上的TMDb,该数据集包含两个.csv文件:movies.csv和credits.csv。首先读取数据集:
12movies = pd.read_csv('tmdb_5000_movies.csv')credits = pd.read_csv(r'tmdb_5000_credits.csv')
数据集中包含了4803部电影的相关信息,包括电影类型,关键词,电影名字等,但并不包含单个用户的信息。因此,接下来,我们将主要根据每部电影的相关信息,从中抽取出每一部电影的特征,这些特征将用于计算电影之间的相似度,从而完成电影的推荐。
数据处理为了提取到每部电影(每行对应一部电影)的特征,需要先对数据做些处理。
将movie和credits这两张表合并:
12movies = movies.merge(credits,on='title')movies.dropna(inplace ...
协同过滤算法
回顾:基于内容的推荐算法上一次,我们介绍了基于内容的电影推荐算法,该算法要求事先知道每部电影的特征向量$x$,然后根据$x$去估计每个用户的特征向量$\theta$。预测得到的第$j$个用户对于第$i$部电影的评分就等于${({\theta}^{(j)})}^Tx^{(i)}$,如果预测评分较高,则将这部电影推荐给该用户。
在阅读下面的内容之前,建议转到上一次的分享内容再过一遍,因为两者有很多相似之处。(前文传送门戳我)
协同过滤现在,假设我们并不知道每部电影的特征向量,但知道每个用户的特征向量(表征用户对于爱情片or动作片的热爱程度)。
比如Alice的特征向量是$\theta^{(1)}=[0,5,0]$,则表明Alice比较喜欢爱情片(第二个维度表征用户对于爱情片的喜爱程度),同理可知Carol比较喜欢动作片。
有了这些条件,就可以估计每部电影的特征向量$x$了,和之前基于内容的推荐算法一样,都可以基于最小二乘法进行求解。
求解目标写成数学形式如下:
其中,$r(i,j)$表示第j个用户是否对第i部电影做了评分,已评为1,否则为0.
$y^{(i,j)}$表示第j个用户对于第i ...
FlyAI蘑菇分类竞赛TOP5方案分享
入门深度学习至今已经一年了,趁着这个暑假参加了FlyAI举办的蘑菇分类竞赛,并侥幸取得了第5名。虽然之前也分享过类似竞赛的文章,但都是作为学习帖(传送门戳我),因此本文算是第一次正式参加机器学习类竞赛的浅薄经验分享帖,不足之处,欢迎指正。
赛题介绍这里就不复制官方大段的赛事介绍了,只讲一下重点部分:
给定一批图片,其中共有9种不同品种的蘑菇,希望你用机器学习的方法训练一个分类器,使得该分类器能够将不同种类的蘑菇区分开来。
评估指标是准确率(Accuracy),它定义为测试集中所有预测正确的样本数与实际总样本数之比。
图片被划分为训练集和测试集两部分。
和Kaggle等竞赛不同,这里我们是看不到测试数据的,并且只能看到训练集的很小部分数据。
官方提供训练平台,并有免费算力发放,因此不需要担心显卡的问题。
baseline搭建官方已经定义好了数据的读取代码,并给出了基于PyTorch的baseline,所以并不需要我们从头去搭建baseline。
我们要做的,就是在这个baseline基础做优化,尽可能地去提升准确率指标。
模型优化合适的骨干网络骨干网络用于提取图片中的特征,并将特征送入分 ...
基于内容的推荐算法:以电影推荐为例
讲个故事哈:
在一个周五的傍晚,你独自取了外卖,回到寝室,拿起手机,准备边吃饭边欣赏电影的精彩。你打开了外卖包装,一边吃一边快速地刷着视频软件。不久,外卖盒子已是空空如也,而你仍然在快速地刷着视频软件。没错,此时外卖已吃完,你还是没有找到想看的电影,反被淹没在信息流的大海。
推荐系统是个啥?随着社会的发展和科技的进步,互联网上的信息变得越来越多,对于用户来说,很难直接对这些信息加以有效利用。
因此,如何做到对不同用户推送其所需要的内容是非常必要的,这便引出了推荐系统。
事实上,你每天都在接触它。B站首页内容,抖音短视频,淘宝首页,腾讯视频首页等等,背后都是推荐系统在起作用。
我打算花一些时间去学习推荐系统领域相关的知识,所有的学习笔记将更新在本号,欢迎小伙伴们持续关注丫~
基于内容的推荐算法推荐系统所采用的算法,称之为推荐算法。推荐算法的种类较多,本文将参考吴恩达老师的视频,介绍基于内容的推荐算法(Content-based recommender systems)。
所有内容均基于下面的栗子。
在这个栗子中,我们将构建一个基于内容的电影推荐系统。
总共5部电影:Love at ...