之前有写过推荐的相关博客,通过皮尔森相关性、knn、以及矩阵分解进行处理,当时使用的矩阵分解为sklearn的集成方法,这里

1. 矩阵分解

矩阵分解是推荐系统公认的算法。矩阵分解是一种协同过滤模型。协同过滤从广义上讲,它是使用涉及多个用户、代理和数据源之间协作的技术对信息或模式进行过滤的过程。

详细的说,矩阵分解模型通过将用户-项目交互的矩阵(例如,评级矩阵)分解为两个相较低等级的矩阵的乘机,从而获取用户-项目交互的低等级结构。

R∈Rm×n\mathbf{R} \in \mathbb{R}^{m \times n}RRm×n 用来表示mmm个用户 和 nnn个项目的交互矩阵, R\mathbf{R}R中的值代表评分。 用户-项目交互将分解为用户潜在矩阵 P∈Rm×k\mathbf{P} \in \mathbb{R}^{m \times k}PRm×k和项目潜在矩阵 Q∈Rn×k\mathbf{Q} \in \mathbb{R}^{n \times k}QRn×k,其中 k≪m,nk \ll m, nkm,n是潜在因子的大小。让 pu\mathbf{p}_upu 表示P\mathbf{P}P的第 uthu^\mathrm{th}uth行以及 qi\mathbf{q}_iqi 表示Q\mathbf{Q}Q的第 ithi^\mathrm{th}ith 行 。对于给定的项目iii, qi\mathbf{q}_iqi用于衡量项目具有的特征比如电影的流派和语言。对于给定的用户 uuu, pu\mathbf{p}_upu衡量用户对项目相应特征的兴趣程度。这些潜在的因素可能是这些示例中明显的维度也许这些维度完全没法解释。 可以通过一下方程估计评级:

R^=PQ⊤\hat{\mathbf{R}} = \mathbf{PQ}^\topR^=PQ

R^∈Rm×n\hat{\mathbf{R}}\in \mathbb{R}^{m \times n}R^Rm×n是形状与 R\mathbf{R}R相同的预测评级矩阵。该预测规则的一个主要问题是无法对用户/项目偏差进行建模。例如, 一些用户更加倾向于给出较高的分数,或者某些项目由于质量问题总是获得较低的评分,这些偏差在显示中很常见。为了捕获这些偏差,引入用户的特定偏差以及项目的特定偏差。具体来说,用户 uuu 给项目 iii预测评分为:

R^ui=puqi⊤+bu+bi\hat{\mathbf{R}}_{ui} = \mathbf{p}_u\mathbf{q}^\top_i + b_u + b_i R^ui=puqi+bu+bi

然后,我们通过最小化预测评分和真实评分之间的均方误差来训练矩阵分解模型。目标函数定义如下:

argminP,Q,b∑(u,i)∈K∥Rui−R^ui∥2+λ(∥P∥F2+∥Q∥F2+bu2+bi2)\underset{\mathbf{P}, \mathbf{Q}, b}{\mathrm{argmin}} \sum_{(u, i) \in \mathcal{K}} \| \mathbf{R}_{ui} - \hat{\mathbf{R}}_{ui} \|^2 + \lambda (\| \mathbf{P} \|^2_F + \| \mathbf{Q} \|^2_F + b_u^2 + b_i^2 ) P,Q,bargmin(u,i)KRuiR^ui2+λ(PF2+QF2+bu2+bi2)

λ\lambdaλ 表示正则化率。正则项λ(∥P∥F2+∥Q∥F2+bu2+bi2)\lambda (\| \mathbf{P} \|^2_F + \| \mathbf{Q} \|^2_F + b_u^2 + b_i^2 )λ(PF2+QF2+bu2+bi2) 用于通过惩罚参数的大小来避免过度拟合。 每对(u,i)(u, i)(u,i)Rui\mathbf{R}_{ui}Rui被存储于K={(u,i)∣Ruiis known}\mathcal{K}=\{(u, i) \mid \mathbf{R}_{ui} \text{ is known}\}K={(u,i)Rui is known}集合中。模型可以使用优化算法学习,比如SGD和Adam.

下图直观展示矩阵分解:

image-20201012122213971

使用MovieLens数据集进行矩阵分解的训练。

2. MovieLens数据集

有许多可用于推荐研究的数据集。其中,MovieLens 数据集可能是最受欢迎的数据集之一。MovieLens是基于网络的非商业性电影推荐系统。它创建于1997年,由明尼苏达大学的研究实验室GroupLens运营,目的是收集电影收视率数据用于研究目的。MovieLens数据对于包括个性化推荐和社会心理学在内的多项研究至关重要。
我们将使用MovieLens 100K数据集,该数据集包括 100,000 收视率从1到5星不等,在1682部电影中有943位用户。已对其进行清理,以便每个用户至少对20部电影评分。还提供一些简单的人口统计信息,例如用户的年龄,性别,体裁和物品。

from d2l import mxnet as d2l
from mxnet import gluon, np, autograd, npx, init
import mxnet as mx
from mxnet.gluon import nn
from plotly import express as px, graph_objs as go
import os
import pandas as pdnpx.set_np()

然后,我们下载MovieLens 100k数据集,并将加载为pandas的DataFrame

d2l.DATA_HUB['ml-100k'] = ('http://files.grouplens.org/datasets/movielens/ml-100k.zip','cd4dcac4241c8a4ad7badc7ca635da8a69dddb83')def read_data_ml100k():data_dir = d2l.download_extract('ml-100k')names = ['user_id', 'item_id', 'rating', 'timestamp']data = pd.read_csv(os.path.join(data_dir, 'u.data'), '\t', names=names, engine='python')num_users = data.user_id.unique().shape[0]num_items = data.item_id.unique().shape[0]return data, num_users, num_items

2.1 数据集统计

加载数据用于观察。

data, num_users, num_items = read_data_ml100k()
sparsity = 1 - len(data) / (num_users * num_items)
print(f'number of users: {num_users}, number of items: {num_items}')
print(f'matrix sparsity: {sparsity:f}')
data.head(5)

image-20201012133332022

评分矩阵中的大多数值都是未知的,因为用户尚未对大多数电影进行评分。我们还显示了该数据集的稀疏性。稀疏度定义为 :1−numberofnonzeroentries/(numberofusers∗numberofitems)1 - number of nonzero entries / ( number of users * number of items)1numberofnonzeroentries/(numberofusersnumberofitems)。显然,交互矩阵非常稀疏(即稀疏度= 93.695%)。现实世界的数据集可能会遭受更大程度的稀疏性,并且一直是构建推荐系统的长期挑战。可行的解决方案是使用其他辅助信息(例如用户/项目功能)来减轻稀疏性。下面通过crosstab(或使用pivot)进行数据交叉,获取用户-项目交互矩阵形式,0都是没有数据的,可见数据非常稀疏。

pd.crosstab(data.user_id, data.item_id, values=data.rating, aggfunc=sum).fillna(0).iloc[:10,:20]

image-20201012133354213

绘制评分的计数分布,如预期相仿,近视正太,大多数集中在3~4.

px.histogram(data, x='rating', width=580, height=400, opacity=0.7, title="MovieLens 100K 评分分布")

在这里插入图片描述

对每个用户求其平均评分,绘制平均评分的计数分布图,可见同样符合正太分布。

px.histogram(data.groupby('user_id')['rating'].mean(), width=580, height=400, opacity=0.7, title="MovieLens 100K 用户平均评分分布", labels={"value":"rating"})

在这里插入图片描述

对每个电影求其平均评分,绘制平均评分的计数分布图,除去极好(全5分)以及极坏的(全5分)基本符合正太分布。

px.histogram(data.groupby('item_id')['rating'].mean(), width=580, height=400, opacity=0.7, title="MovieLens 100K 电影平均评分分布", labels={"value":"rating"})

image-20201012133448372

2.2 分割数据集

我们将数据集分为训练集和测试集。以下功能提供了两种分割模式,包括random和seq-aware。在此 random模式下,该函数在不考虑时间戳的情况下随机拆分100k交互,默认情况下将90%的数据用作训练样本,其余10%用作测试样本。在该 seq-aware模式下,我们忽略了用户最近为测试评分的项目,以及用户的历史交互作为训练集。用户历史交互根据时间戳从最早到最新进行分类。此模式将在序列感知推荐部分中使用。

def split_data_ml100k(data, num_users, num_items, split_mode='random', test_ratio=0.1):if split_mode == 'seq-aware':train_items, test_items, train_list = {}, {}, []for line in data.itertuples():u, i, rating, time = line[1], line[2], line[3], line[4]train_items.setdefault(u, []).append((u, i, rating, time))if u not in test_items or test_items[u][-1] < time:test_items[u] = (i, rating, time)for u in range(1, num_users + 1):train_list.extend(sorted(train_items[u], key=lambda k: k[3]))test_data = [(key, *value) for key, value in test_items.items()]train_data = [item for item in train_list if item not in test_data]train_data = pd.DataFrame(train_data)test_data = pd.DataFrame(test_data)else:mask = [True if x == 1 else False for x in np.random.uniform(0, 1, (len(data))) < 1 - test_ratio]neg_mask = [not x for x in mask]train_data, test_data = data[mask], data[neg_mask]return train_data, test_data

2.3 加载数据

分割数据集后,为了方便起见,我们将训练集和测试集转换为列表和字典/矩阵。以下函数逐行读取数据帧,并枚举从零开始的用户/项索引。然后,该函数返回用户,项目,等级和记录交互的字典/矩阵的列表。我们可以将反馈的类型指定为explicit 或implicit。

def load_data_ml100k(data, num_users, num_items, feedback='explicit'):users, items, scores = [], [], []inter = np.zeros((num_items, num_users)) if feedback == 'explicit' else {}for line in data.itertuples():user_index, item_index = int(line[1] - 1), int(line[2] - 1)score = int(line[3]) if feedback == 'explicit' else 1users.append(user_index)items.append(item_index)scores.append(score)if feedback == 'implicit':inter.setdefault(user_index, []).append(item_index)else:inter[item_index, user_index] = scorereturn users, items, scores, inter

之后,我们将上述步骤放在一起,将在下一部分中使用。结果用Dataset和 包裹DataLoader。请注意,训练数据的last_batch设置为rollover模式(剩余样本将滚动到下一个epoch),并按顺序排序。

def split_and_load_ml100k(split_mode='seq-aware', feedback='explicit', test_ratio=0.1, batch_size=256):data, num_users, num_items = read_data_ml100k()train_data, test_data = split_data_ml100k(data, num_users, num_items, split_mode, test_ratio)train_u, train_i, train_r, _ = load_data_ml100k(train_data, num_users, num_items, feedback)test_u, test_i, test_r, _ = load_data_ml100k(test_data, num_users, num_items, feedback)train_set = gluon.data.ArrayDataset(np.array(train_u), np.array(train_i), np.array(train_r))test_set = gluon.data.ArrayDataset(np.array(test_u), np.array(test_i), np.array(test_r))train_iter = gluon.data.DataLoader( train_set, shuffle=True, last_batch='rollover',batch_size=batch_size)test_iter = gluon.data.DataLoader(test_set, batch_size=batch_size)return num_users, num_items, train_iter, test_iter

3.定义矩阵分解模型

首先,我们实现上述矩阵分解模型。可以使用创建用户和项目潜在因素nn.Embedding。的input_dim是项目/用户的数量,而(output_dim)是潜在因素的维度( k )。我们还可以 nn.Embedding通过将其设置output_dim为1来创建用户/项目偏好 。在该forward函数中,使用用户ID和项目ID来查找嵌入。

class MF(nn.Block):def __init__(self, num_factors, num_users, num_items, **kwargs):super(MF, self).__init__(**kwargs)self.P = nn.Embedding(input_dim=num_users, output_dim=num_factors)self.Q = nn.Embedding(input_dim=num_items, output_dim=num_factors)self.user_bias = nn.Embedding(num_users, 1)self.item_bias = nn.Embedding(num_items, 1)def forward(self, user_id, item_id):P_u = self.P(user_id)Q_i = self.Q(item_id)b_u = self.user_bias(user_id)b_i = self.item_bias(item_id)outputs = (P_u * Q_i).sum(axis=1) + np.squeeze(b_u) + np.squeeze(b_i)return outputs.flatten()

4. 评估定义

然后,我们实施RMSE(均方根误差)度量,该度量通常用于度量模型预测的评分得分与实际观察到的评分(基本事实)之间的差异:

RMSE=1∣T∣∑(u,i)∈T(Rui−R^ui)2\mathrm{RMSE} = \sqrt{\frac{1}{|\mathcal{T}|}\sum_{(u, i) \in \mathcal{T}}(\mathbf{R}_{ui} -\hat{\mathbf{R}}_{ui})^2} RMSE=T1(u,i)T(RuiR^ui)2

T\mathcal{T}T 是由成对的用户和要评估的项目组成的集合。∣T∣|\mathcal{T}|T 是集合的大小。我们可以使用mx.metric提供的RMSE函数功能。

def evaluator(net, test_iter, devices):rmse = mx.metric.RMSE()  # 获取评估函数rmse_list = []for idx, (users, items, ratings) in enumerate(test_iter):u = gluon.utils.split_and_load(users, devices, even_split=False)i = gluon.utils.split_and_load(items, devices, even_split=False)r_ui = gluon.utils.split_and_load(ratings, devices, even_split=False)r_hat = [net(u, i) for u, i in zip(u, i)]rmse.update(labels=r_ui, preds=r_hat)rmse_list.append(rmse.get()[1])return float(np.mean(np.array(rmse_list)))

5.训练和评估

在训练功能上,我们采用 L2 体重下降引起的损失。重量衰减机制与 L2 正则化。

def train_recsys_rating(net, train_iter, test_iter, loss, trainer, num_epochs, devices=d2l.try_all_gpus(), evaluator=None,**kwargs):timer = d2l.Timer()data = []for epoch in range(num_epochs):metric, l = d2l.Accumulator(3), 0.for i, values in enumerate(train_iter):timer.start()input_data = []values = values if isinstance(values, list) else [values]for v in values:input_data.append(gluon.utils.split_and_load(v, devices))train_feat = input_data[0:-1] if len(values) > 1 else input_datatrain_label = input_data[-1]with autograd.record():preds = [net(*t) for t in zip(*train_feat)]ls = [loss(p, s) for p, s in zip(preds, train_label)][l.backward() for l in ls]l += sum([l.asnumpy() for l in ls]).mean() / len(devices)trainer.step(values[0].shape[0])metric.add(l, values[0].shape[0], values[0].size)timer.stop()if len(kwargs) > 0:  # AutoRec中会用到这个test_rmse = evaluator(net, test_iter, kwargs['inter_mat'], devices)else:test_rmse = evaluator(net, test_iter, devices)train_l = l / (i + 1)data.append((epoch+1, train_l, test_rmse))print(f'train loss {metric[0] / metric[1]:.3f}, test RMSE {test_rmse:.3f}')print(f'{metric[2] * num_epochs / timer.sum():.1f} examples/sec on {str(devices)}')fig = px.line(pd.DataFrame(data, columns=['epoch', 'train loss', 'test RMSE']), x='epoch', y=['train loss', 'test RMSE'],  width=580, height=400)fig.show()

最后,让我们将所有事物放在一起并训练模型。在这里,我们将潜在因子维度设置为30。

devices = d2l.try_all_gpus()
num_users, num_items, train_iter, test_iter = d2l.split_and_load_ml100k(test_ratio=0.1, batch_size=512)
net = MF(30, num_users, num_items)
net.initialize(ctx=devices, force_reinit=True, init=mx.init.Normal(0.01))
lr, num_epochs, wd, optimizer = 0.002, 20, 1e-5, 'adam'
loss = gluon.loss.L2Loss()
trainer = gluon.Trainer(net.collect_params(), optimizer, {"learning_rate": lr, 'wd': wd})
train_recsys_rating(net, train_iter, test_iter, loss, trainer, num_epochs, devices, evaluator)

image-20201012133613940

image-20201012133622575

下面,我们使用训练过的模型来预测用户(ID 20)可能对商品(ID 30)给予的评分。

scores = net(np.array([20], dtype='int', ctx=devices[0]), np.array([30], dtype='int', ctx=devices[0]))
scores

image-20201012133637077

6. 参考

https://d2l.ai/chapter_recommender-systems/mf.html

7.代码

github

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. React+Ant Design使用Tree组件实现树形结构简单拖拽

    import React, { useState } from react; import { Tree } from antd;// 测试数据 let treeDatas [{title: 董事会,key: 0-0,children: [{ title: 如来佛, key: 0-0-1 },{ title: 观世音, key: 0-0-2 },{ title: 唐三藏, key: 0-0-3 },],},{title: 财务部,key: 0-1,children: …...

    2024/4/10 9:48:19
  2. CSS外观属性总结

    属性表示注意点color颜色我们通常用 十六进制 比如 而且是简写形式 #fffline-height行高控制行与行之间的距离text-align水平对齐可以设定文字水平的对齐方式text-indent首行缩进通常我们用于段落首行缩进2个字的距离 text-indent: 2em;text-decoration文本修饰记住 添加 …...

    2024/5/1 17:22:40
  3. Python中的数据结构

    Python中常见的数据类型是 列表(list)&#xff0c;元组(tuple),字典(map) Python是无类型的语言&#xff0c;所以不会指定类型&#xff0c;是在变量赋值的过程中直接确定了类型 1.list list定义时用大括号赋值 [] list1 [1,2,3,4,5] 可以使用下标索引来访问列表中的值&a…...

    2024/4/14 2:24:08
  4. 一篇关于modbus入门的基础知识。

    http://www.elecfans.com/rengongzhineng/596297.html modbus 入门篇&#xff0c;详细介绍&#xff08;值得收藏&#xff09;...

    2024/4/27 4:43:25
  5. 架构师的修养3.1 建造者、装饰、适配器、代理模式

    建造者模式 将复杂对象的构建和表示分类&#xff0c;隐藏了复杂对象的构建过程&#xff0c;动态创建具有复合属性的对象。 优点&#xff1a; 具体的建造者之间互相独立&#xff0c;利于系统扩展&#xff0c;不影响其他模块 客户端不必知道内部组成细节 缺点&#xff1a; 建造…...

    2024/4/28 9:09:00
  6. springBoot:The field file exceeds its maximum permitted size of 1048576 bytes.

    一、简介 Spring Boot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误&#xff0c; 显示文件的大小超出了允许的范围。查看了官方文档&#xff0c;原来Spring Boot工程嵌入的tomcat限制了请求的文件大小&#xff0c; 这一点在Spr…...

    2024/4/24 0:59:33
  7. vscode启动vue工程not found node-sass问题解决

    1.执行命令 npm i sass-loader 2.执行命令 npm Install node-sass 3.执行命令 npm run dev 运行工程&#xff0c;成功解决not found node-sass问题...

    2024/4/18 2:48:38
  8. vue.js父组件传值给子组件

    父组件内&#xff1a; <ReceiptModal :selection-rows"selectionRows"/> 子组件内&#xff1a; props: {selectionRows: {type: Array} } showtooltip...

    2024/4/13 22:43:12
  9. 2019CCPC女生专场赛_K - Tetris_打表/模拟_暴力之王

    HDU - 6554 题目链接在此&#xff01; wls 有一个 n ∗ m 的网格&#xff0c;他现在想用俄罗斯方块中的"凸"型密铺它。一个"凸"型占四个格子&#xff0c;你可以随意把它调成上下左右四个方向中的一个。密铺的定义是网格中任意一个格子被且只被一个"凸…...

    2024/4/9 21:22:25
  10. Java集合 HashSet的源码分析及常用方法讲解

    一. HashSet概述 HashSet是Java集合Set的一个实现类&#xff0c;Set是一个接口&#xff0c;其实现类除HashSet之外&#xff0c;还有TreeSet&#xff0c;并继承了Collection&#xff0c;HashSet集合很常用&#xff0c;同时也是程序员面试时经常会被问到的知识点&#xff0c;下面…...

    2024/4/16 14:26:02
  11. 国庆结束,Java后端3+4面字节,轻松斩获秋招第一份offer

    字节跳动&#xff0c;先面了data部门&#xff0c;3面技术面之后hr说需要实习转正&#xff0c;拒绝&#xff0c;之后另一个部门捞起&#xff0c;四面技术面&#xff0c;已oc 分享面经&#xff0c;希望对大家有所帮助&#xff0c;秋招顺利在文末分享了我为金九银十准备的备战资源…...

    2024/4/13 11:03:25
  12. python修改微信和支付宝步数

    python修改微信和支付宝步数 项目意义实现方法python代码下载地址 很多人学习python&#xff0c;不知道从何学起。 很多人学习python&#xff0c;掌握了基本语法过后&#xff0c;不知道在哪里寻找案例上手。 很多已经做案例的人&#xff0c;却不知道如何去学习更加高深的知识。…...

    2024/4/14 9:23:23
  13. nacos发布为Windows服务自启动

    前言 小公司&#xff0c;没有买自己的局域网服务器&#xff0c;测试服务器&#xff08;centos&#xff09;在阿里云 使用nacos网络交互通信慢&#xff0c;于是在本机电脑上也配了nacos服务&#xff0c;注册为Windows服务自启动&#xff0c;方便自己独立开发与调试 正文 1. 搜…...

    2024/4/9 17:01:14
  14. java集合 arrayList源码分析add方法自动扩容机制(上)

    一、ArrayList简介 1.1、ArrayList概述 1&#xff09;ArrayList是可以动态增长和缩减的索引序列&#xff0c;它是基于数组实现的List类。 2&#xff09;该类封装了一个动态再分配的Object[]数组&#xff0c;每一个类对象都有一个capacity属性&#xff0c;表示它们所封装的Obje…...

    2024/4/17 12:53:17
  15. JSONP罗技应用

    本章节我们将向大家介绍 JSONP 的知识。 Jsonp(JSON with Padding) 是 json 的一种"使用模式"&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;那获取资料&#xff0c;即跨域读取数据。 为什么我们从不同的域&#xff08;网站&#xff09;访问数据需…...

    2024/4/13 17:31:14
  16. MATLAB并行计算

    先上图&#xff0c;图中求500次随机矩阵的特征值&#xff0c;串行14.85s&#xff0c;并行3.63s 。 %% 串行计算 tic S11; for i 1:500S1 S1max(eig(rand(i))); end display(strcat(客户端串行计算时间&#xff1a;,num2str(toc),秒));并行化&#xff1a; %% 开启线程池 if i…...

    2024/4/9 22:33:41
  17. Day.js替代moment.js

    Day.js Moment.js 的 2kB 轻量化方案&#xff0c;拥有同样强大的 API 下载、解析和执行更少的 JavaScript&#xff0c;为您的代码留出更多时间。 Day.js 是一个轻量的处理时间和日期的 JavaScript 库&#xff0c;和 Moment.js 的 API 设计保持完全一样。 如果您曾经用过 Mo…...

    2024/4/27 0:58:33
  18. 使用Git使用步骤

    使用前提你已经安装好了Git&#xff0c;教程https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496 https://git-scm.com/downloads 一、初始化git仓库 git init 二、新建一个文件并加入git管理 git add 文件名 三、将文件提交至本地仓库 git commit -m "…...

    2024/4/23 0:01:47
  19. 综合实训周报三

    目录标题理论学习实践学习理论学习 本周的理论学习主要学习了特征选择相关的知识。 特征选择技术可以精简掉无用的特征&#xff0c;以降低最终模型的复杂性&#xff0c;它的最终目的是得到一个简约模型&#xff0c;在不降低预测准确率或对预测准确率影响不大的情况下提高计算…...

    2024/4/14 5:31:46
  20. 正则表达式校验使用

    正则表达式使用 正则表达式可以用于数据校验 /*是否带有小数*/ function isDecimal(strValue ) { var objRegExp /^\d\.\d$/;return objRegExp.test(strValue); } /*校验是否中文名称组成 */ function ischina(str) {var reg/^[\u4E00-\u9FA5]{2,4}$/; /*定义验证…...

    2024/4/18 3:37:46

最新文章

  1. Java中的同步(Synchronization)和锁(Locks)有何区别,如何使用它们?

    在 Java 中&#xff0c;同步&#xff08;Synchronization&#xff09;和锁&#xff08;Locks&#xff09;都是用于管理多线程之间对共享资源的访问&#xff0c;以避免并发问题&#xff0c;如数据不一致或者线程干扰等问题。虽然它们的目的相同&#xff0c;但具体的实现机制和使…...

    2024/5/4 17:30:50
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 第十一届蓝桥杯物联网试题(省赛)

    对于通信方面&#xff0c;还是终端A、B都保持接收状态&#xff0c;当要发送的数组不为空再发送数据&#xff0c;发送完后立即清除&#xff0c;接收数据的数组不为空则处理&#xff0c;处理完后立即清除&#xff0c;分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…...

    2024/5/4 4:09:25
  4. 论文阅读AI工具链

    文献检索 可以利用智谱清言来生成合适的文献检索式&#xff0c;并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时&#xff0c;您可以使用类似的逻辑来构建您的搜索式&#xff0c;但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索&#xff0c;但是…...

    2024/5/3 14:44:57
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/4 12:05:22
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/4 11:23:32
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/4 14:46:16
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/3 16:00:51
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/4 12:10:13
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/3 21:22:01
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/3 23:17:01
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/4 14:46:12
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/4 14:46:11
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/4 14:46:11
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/4 2:14:16
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/3 16:23:03
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/4 12:39:12
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/4 13:16:06
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/4 16:48:41
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/4 14:46:05
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/4 2:00:16
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/3 22:03:11
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/4 9:07:39
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/4 14:46:02
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57