当前位置: 首页 > news >正文

kaggle竞赛 | 计算机视觉 | Doodle Recognition Challenge

目录

  • 赛题链接
  • 赛题背景
  • 数据集探索
    • 合并多个类别CSV数据集
  • 数据建模 (pytorch)

赛题链接

https://www.kaggle.com/competitions/quickdraw-doodle-recognition/overview/evaluation
数据集从上述链接中找

赛题背景

'Quick,Draw!'作为实验性游戏发布,以有趣的方式向公众宣传 AI 的工作原理。游戏提示用户绘制描绘特定类别的图像,例如“香蕉”、“桌子”等。游戏生成了超过 1B 幅图画,其中的一个子集被公开发布,作为本次比赛训练集的基础。该子集包含 5000 万张图纸,涵盖 340 个标签类别。

听起来很有趣,对吧?挑战在于:由于训练数据来自游戏本身,绘图可能不完整或可能与标签不匹配。您需要构建一个识别器,它可以有效地从这些嘈杂的数据中学习,并在来自不同分布的手动标记的测试集上表现良好。

您的任务是为现有的 Quick, Draw! 构建一个更好的分类器。数据集。通过在此数据集上推进模型,Kagglers 可以更广泛地改进模式识别解决方案。这将对手写识别及其在 OCR(光学字符识别)、ASR(自动语音识别)和 NLP(自然语言处理)等领域的稳健应用产生直接影响。
在这里插入图片描述
属于多分类问题

数据集探索

字段解释

KeyTypeDescription
key_id64 位无符号整数所有图纸的唯一标识符。
wordstring玩家绘制的类别。
recognizedboolean该词是否被游戏识别。
timestampdatetime创建绘图时间
countrycodestring玩家所在位置的两个字母国家代码
drawingstring表示矢量绘图的 JSON 数组

example:
在这里插入图片描述
根据矢量绘图的JSON数组画图

def show_imale(n,owls,drawing):fig,axs = plt.subplots(nrows=n,ncols=n,sharex=True,sharey=True,figsize = (16.10))for i , drawing in enumerate(owls,drawing):ax = axs[i//n,i%n]for x,y in drawing:ax.plot(x,-np.array(y),lw=3)fig.savefig('owls.png',dpi=200)plt.show();

在这里插入图片描述

赛题建模思路

  1. 读取数据并转化为图像
  2. 构建分类模型
  3. 确定训练细节和数据扩增方法;
  4. 对测试集完成预测并完成模型集成

数据集的文件结构:
在这里插入图片描述
每一种类型的数据图片,都放在一个单独的csv中,下面要对整个数据集进行处理。

合并多个类别CSV数据集

import os, sys, codecs, glob
import numpy as np
import pandas as pd
import cv2
import timmfrom sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split# 读取单个csv文件
def read_df(path, nrows):print('Reading...', path)if nrows.isdigit():return pd.read_csv(path, nrows=int(nrows), parse_dates=['timestamp'])else:return pd.read_csv(path, parse_dates=['timestamp'])# 读取多个csv文件
def contcat_df(paths, nrows):dfs = []for path in paths:dfs.append(read_df(path, nrows))return pd.concat(dfs, axis=0, ignore_index=True)def main():if not os.path.exists('./data'):os.mkdir('./data')CLASSES_CSV = glob.glob('../input/train_simplified/*.csv')CLASSES = [x.split('/')[-1][:-4] for x in CLASSES_CSV]print('Reading data...')# 读取指定行数的csv文本,并进行拼接df = contcat_df(CLASSES_CSV, number)# 数据打乱df = df.reindex(np.random.permutation(df.index))lbl = LabelEncoder().fit(df['word'])df['word'] = lbl.transform(df['word'])if df.shape[0] * 0.05 < 120000:df_train, df_val = train_test_split(df, test_size=0.05)else:df_train, df_val = df.iloc[:-500000], df.iloc[-500000:]print('Train:', df_train.shape[0], 'Val', df_val.shape[0])print('Save data...')df_train.to_pickle(os.path.join('./data', 'train_' + str(number) + '.pkl'))df_val.to_pickle(os.path.join('./data', 'val_' + str(number) + '.pkl'))# python 1_save2df.py 50000
# python 1_save2df.py all
if __name__ == "__main__":number = str(sys.argv[1])main()

其中glob的作用如下注释所示

import glob#获取指定目录下的所有图片
print (glob.glob(r"/home/qiaoyunhao/*/*.png"),"\n")#加上r让字符串不转义#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径

得到的结果如下所示:
32300个训练集,1700个测试集
这里我们是先采用少量数据集训练,试一下数据是否拟合,若拟合
在这里插入图片描述

数据建模 (pytorch)

导入所需库

import os, sys, codecs, glob
from PIL import Image, ImageDrawimport numpy as np
import pandas as pd
import cv2import torch
torch.backends.cudnn.benchmark = False
import timmimport torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
from torch.utils.data.dataset import Datasetimport logging
logging.basicConfig(level=logging.DEBUG, filename='example.log',format='%(asctime)s - %(filename)s[line:%(lineno)d]: %(message)s')  

将绘图的轨迹转变为图片
这里用的是opencv,cv的处理速度大于pillow

def draw_cv2(raw_strokes, size=256, lw=6, time_color=True):BASE_SIZE = 299img = np.zeros((BASE_SIZE, BASE_SIZE), np.uint8)for t, stroke in enumerate(eval(raw_strokes)):str_len = len(stroke[0])for i in range(len(stroke[0]) - 1):# 数据集随机丢弃一些像素,属于数据集的drop out,防止过拟合if np.random.uniform() > 0.95:continuecolor = 255 - min(t, 10) * 13 if time_color else 255_ = cv2.line(img, (stroke[0][i] + 22, stroke[1][i]  + 22),(stroke[0][i + 1] + 22, stroke[1][i + 1] + 22), color, lw)if size != BASE_SIZE:return cv2.resize(img, (size, size))else:return img

计算topk准确率

def accuracy(output, target, topk=(1,)):with torch.no_grad():maxk = max(topk)batch_size = target.size(0)_, pred = output.topk(maxk, 1, True, True)pred = pred.t()correct = pred.eq(target.view(1, -1).expand_as(pred))# print(correct.shape)res = []for k in topk:# print(correct[:k].shape)correct_k = correct[:k].float().sum()res.append(correct_k.mul_(100.0 / batch_size))# print(res)return res

数据扩展

class QRDataset(Dataset):def __init__(self, img_drawing, img_label, img_size, transform=None):self.img_drawing = img_drawingself.img_label = img_labelself.img_size = img_sizeself.transform = transformdef __getitem__(self, index):img = np.zeros((self.img_size, self.img_size, 3))img[:, :, 0] = draw_cv2(self.img_drawing[index], self.img_size)img[:, :, 1] = img[:, :, 0]img[:, :, 2] = img[:, :, 0]img = Image.fromarray(np.uint8(img))if self.transform is not None:img = self.transform(img)label = torch.from_numpy(np.array([self.img_label[index]]))return img, labeldef __len__(self):return len(self.img_drawing)

载入模型

def get_resnet18():model = models.resnet18(True)model.avgpool = nn.AdaptiveAvgPool2d(1) # 匹配不固定的输入尺寸model.fc = nn.Linear(512, 340)return modeldef get_resnet34():model = models.resnet34(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(512, 340)return modeldef get_resnet50():model = models.resnet50(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(2048, 340)return modeldef get_resnet101():model = models.resnet101(True)model.avgpool = nn.AdaptiveAvgPool2d(1)model.fc = nn.Linear(2048, 340)

图片mixup操作

def mixup_data(x, y, alpha=1.0, use_cuda=True):'''Returns mixed inputs, pairs of targets, and lambda'''if alpha > 0:lam = np.random.beta(alpha, alpha)else:lam = 1batch_size = x.size()[0]if use_cuda:index = torch.randperm(batch_size).cuda()else:index = torch.randperm(batch_size)# x 是一个batch 一批的输入mixed_x = lam * x + (1 - lam) * x[index, :]y_a, y_b = y, y[index]return mixed_x, y_a, y_b, lamdef mixup_criterion(criterion, pred, y_a, y_b, lam):return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)

主函数

  1. 数据扩展
def main():df_train = pd.read_pickle(os.path.join('./data', 'train_' + dataset + '.pkl'))# df_train = df_train.reindex(np.random.permutation(df_train.index))df_val = pd.read_pickle(os.path.join('./data', 'val_' + dataset + '.pkl'))train_loader = torch.utils.data.DataLoader(QRDataset(df_train['drawing'].values, df_train['word'].values, imgsize,transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),# transforms.RandomAffine(5, scale=[0.95, 1.05]),transforms.ToTensor(),# transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])),batch_size=200, shuffle=True, num_workers=5,)val_loader = torch.utils.data.DataLoader(QRDataset(df_val['drawing'].values, df_val['word'].values, imgsize,transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.ToTensor(),# transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])),batch_size=200, shuffle=False, num_workers=5,)

载入模型

if modelname == 'resnet18':model = get_resnet18()elif modelname == 'resnet34':model = get_resnet34()elif modelname == 'resnet50':model = get_resnet50()elif modelname == 'resnet101':model = get_resnet101()else:model = timm.create_model(modelname, num_classes=340, pretrained=True, in_chans=3)

设置优化器等损失函数

# model = nn.DataParallel(model).cuda()# nvismodel.load_state_dict(torch.load('./resnet50_64_7_0.pt'))# model.load_state_dict(torch.load('./data/resnet18_64_16_110.pt'))model = model.cuda()loss_fn = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.01)# scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[2, 3, 5, 7, 8], gamma=0.1)scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=len(train_loader) / 10, gamma=0.95)print('Train:', df_train.shape[0], 'Val', df_val.shape[0])print('Epoch/Batch\t\tTrain: loss/Top1/Top3\t\tTest: loss/Top1/Top3')

训练50次

for epoch in range(50):train_losss, train_acc1s, train_acc5s = [], [], []for i, data in enumerate(train_loader):scheduler.step()model = model.train()train_img, train_label = dataoptimizer.zero_grad()# TODO: data paraell# train_img = Variable(train_img).cuda(async=True)# train_label = Variable(train_label.view(-1)).cuda()train_img = Variable(train_img).cuda()train_label = Variable(train_label.view(-1)).cuda()# 加入mixupif np.random.randint(1, 10) >= 5:mixed_x, y_a, y_b, lam = mixup_data(train_img, train_label)output = model(mixed_x)train_loss = mixup_criterion(loss_fn, output, y_a, y_b, lam)else:output = model(train_img)train_loss = loss_fn(output, train_label)# output = model(train_img)# train_loss = loss_fn(output, train_label)train_loss.backward()optimizer.step()train_losss.append(train_loss.item())if i % 5 == 0:logging.info('{0}/{1}:\t{2}\t{3}.'.format(epoch, i, optimizer.param_groups[0]['lr'], train_losss[-1]))if i % int(10) == 0:val_losss, val_acc1s, val_acc5s = [], [], []with torch.no_grad():train_acc1, train_acc3 = accuracy(output, train_label, topk=(1, 3))train_acc1s.append(train_acc1.data.item())train_acc5s.append(train_acc3.item())for data in val_loader:val_images, val_labels = data# val_images = Variable(val_images).cuda(async=True)# val_labels = Variable(val_labels.view(-1)).cuda()val_images = Variable(val_images).cuda()val_labels = Variable(val_labels.view(-1)).cuda() output = model(val_images)val_loss = loss_fn(output, val_labels)val_acc1, val_acc3 = accuracy(output, val_labels, topk=(1, 3))val_losss.append(val_loss.item())val_acc1s.append(val_acc1.item())val_acc5s.append(val_acc3.item())logstr = '{0:2s}/{1:6s}\t\t{2:.4f}/{3:.4f}/{4:.4f}\t\t{5:.4f}/{6:.4f}/{7:.4f}'.format(str(epoch), str(i),np.mean(train_losss, 0), np.mean(train_acc1s, 0), np.mean(train_acc5s, 0),np.mean(val_losss, 0), np.mean(val_acc1s, 0), np.mean(val_acc5s, 0),)torch.save(model.state_dict(), './data/{0}_{1}_{2}_{3}.pt'.format(modelname, imgsize, epoch, i))print(logstr)

运行

# python 2_train.py 模型 数量 图片尺寸
# python 2_train.py resnet18 5000 64
if __name__ == "__main__":modelname = str(sys.argv[1]) # 模型名字dataset = str(sys.argv[2]) # 数据集规模imgsize = int(sys.argv[3]) # 图片的尺寸main()

相关文章:

spring实验

...

VUE速通(10)Vue3核心语法(2)setup

1 setup 概述 setup是Vue3中一个新的配置项,值是一个函数,它是 Composition API “表演的舞台”,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。 特点如下:setup函数返回的对象中的内容,可直接在模板中使用。setup中访问this是undefined。setu…...

Go设置代理

打开终端 cmd go env 启用 Go Modules 功能 go env -w GO111MODULE=on 配置 GOPROXY 环境变量,以下三选一 1. 七牛 CDN go env -w GOPROXY=https://goproxy.cn,direct 2. 阿里云 go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct 3. 官方 go env -w GOPROXY=h…...

寒假五

1 非常的小丑 应该用a[++len] 最好不要用vector 玩不明白 vector cout<<a[a.size()-k]; 第k大 2 讨论 a[i].y和m的关系就行 3 count(s.begin(),s.end(),"0") 代码是有什么问题吗???为什么一直报错...

基于LoRa的智慧农业解决方案--ASR6601、SX1278、SX1262

我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”,加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。然而,目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面积广袤,大量的区域没…...

[转帖]System Performance 读书笔记 - 操作系统(1)

https://cloud.tencent.com/developer/article/1927381 本系列是针对 Systems Performance: Enterprise and the Cloud, 2nd Edition (2020) 书籍的读书笔记,加入了一些个人理解以及拓展,并且针对一些难以理解的地方提供了一些额外的参考内核(Kernel) 经典模型中,内核在操…...

kaggle竞赛 | 计算机视觉 | Doodle Recognition Challenge

目录赛题链接赛题背景数据集探索合并多个类别CSV数据集数据建模 (pytorch)赛题链接 https://www.kaggle.com/competitions/quickdraw-doodle-recognition/overview/evaluation 数据集从上述链接中找 赛题背景 Quick&#xff0c;Draw&#xff01;作为实验性游戏发布&#xff…...

如何设计一个70W在线人数的弹幕系统文章分析

原文地址&#xff1a; 如何设计一个70W在线人数的弹幕系统 1&#xff1a;http包头 一个http数据包请求由4个部分组成&#xff1a;请求行、请求头标、空行、请求数据。 请求行分为了三个部分。请求方法&#xff0c;请求url与http版本。请求头行&#xff0c;由关键字值对组成&…...

基于Android的动漫之家系统的设计与实现

目录 1.课题研究立项依据 2.文献综述 3.课题研究的基本内容及预期目标或成果 4.课题的研究方案 5.研究进度安排 6.主要参考文献 1.课题研究立项依据 目前国家的动漫交流也正处在不断改革、创新的阶段&#xff0c;我国有关部门充分吸取国外优秀的动漫交流模式&#xff0c;…...

流批一体计算引擎-7-[Flink]的DataStream连接器

参考官方手册DataStream Connectors 1 DataStream连接器概述 一、预定义的Source和Sink 一些比较基本的Source和Sink已经内置在Flink里。 1、预定义data sources支持从文件、目录、socket&#xff0c;以及collections和iterators中读取数据。 2、预定义data sinks支持把数据写…...

测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先&#xff0c;为"水杯"设计一个测试用例&…...

【进击的算法】基础算法——怎么优雅地控制边界范围

学习范围 &#xff1a; ✔️数组 ✔️边界控制本文作者 &#xff1a; 蓝色学者i 边界控制的艺术前言一、为什么需要控制边界&#xff1f;二、怎么优雅地控制边界&#xff1f;三、令人抓狂的二分查找3.1 题目概述3.2解题思路3.3 解决方案方案一&#xff1a;边界都有效方案二&…...

linux基本功系列之-rpm命令实战

文章目录前言&#x1f680;&#x1f680;&#x1f680;一. rpm命令介绍1.1 RPM包介绍1.2 rpm包的优缺点1.3 rpm包获取方式二. 语法格式及常用选项2.1 RPM安装常用参数2.2 rpm格式介绍三. 应用案例3.1 从本地安装软件包3.2 查询lrzsz的包有没有安装3.3 查询命令是哪个包安装的3.…...

冯诺依曼体系结构及操作系统(OS)的简单认识

文章目录冯诺依曼体系结构操作系统&#xff08;Operator System&#xff09;冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储结构。数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑…...

day4 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ●160 链表相交 ● 142.环形链表II

两两交换链表中的节点 链表的指针&#xff0c;要仔细画图&#xff0c;搞清楚cur和cur的next在哪里 这个题还是有点绕的&#xff0c;两两一组交换&#xff0c;还有奇偶数要考虑 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead new ListNo…...

【Linux】目录权限和默认权限

上期介绍了Linux的文件权限&#xff0c;这期我们仔细来说说Linux环境下目录权限和默认权限一、目录权限1.1 进入目录所需的权限我们在进入目录时需要什么样的权限呢&#xff1f;是r、w还是x呢&#xff1f;下面我们一起来验证一下&#xff1a;&#x1f4cb;如下我门拥有全部目录…...

kaggle竞赛 | 计算机视觉 | 数字图像基础操作

目录cv2基本操作图片哈希图像数据扩展无监督数据扩展方法监督式数据扩展方法cv2基本操作 import numpy as np import matplotlib.pyplot as plt import cv2img cv2.imread(cat.jpeg) plt.imshow(img)img cv2.imread(cat.jpeg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) pl…...

7. 好客租房-项目日常推进ing

7. 好客租房-项目日常推进ing 本章节不涉及大量内容,主要是为了推荐项目代码日常进度而设置, 包括添加mock接口, 添加更新房源接口, 为系统添加缓存. 7.1 为前端系统提供mock服务 往往在项目开发中, 为实现前后端并行开发&#xff0c;后端需要对前端所有的请求都都进行支持。…...

前同事居然因为 Pycharm 的这个功能,即使离职三年也依然经常被请去喝茶~

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…...

python使用类装饰器生成函数的使用日志

1 什么是类装饰器 在了解类装饰器之前&#xff0c;建议大家先了解装饰器的概念。 装饰器知识快速入门链接 类装饰器是 Python 中的一种特殊类型的装饰器&#xff0c;它是一个类而不是一个函数。与函数装饰器不同&#xff0c;类装饰器可以在运行时接收参数并返回一个可调用的对…...

有关Android的TextView组件的几个问题

文章目录小结问题及解决参考小结 TextView组件与EditText类似&#xff0c;但有一些不同&#xff0c;理论上TextView是只读的。尝试了让TextView组件可以弹出SetError的提示信息&#xff0c;只读&#xff0c;并不能弹出Android软键盘。 问题及解决 如果需要将TextView组件不能…...

Spring核心模块解析—BeanDifinition。

BeanDifinition前言什么是BeanDefinition&#xff1f;为什么要有BeanDefinition&#xff1f;BeanDifinition重点源码总结前言 Spring中的BeanDifinition在Bean的实例化流程中占有着非常重要的角色&#xff0c;如果你不了解BeanDifinition的话&#xff0c;面试或者学习Bean的生…...

【目标跟踪】------deepsort

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。DeepSORT运用的就是这个策略,上面的视频是DeepSORT对人群进行跟踪的结果,每个bbox左上角的数字是用来标识某个人的唯一ID号。 Deepsort的前身是sort算法,sort算法的核心是卡尔…...

教你一键生成形如Springboot的高大上banner打印效果

背景 今天闲来无聊&#xff0c;想搞一个类似于Springboot项目启动时打印效果&#xff0c;如下图&#xff1a; 问题解决方案 那这个打印效果怎么实现的呢&#xff1f; 其实&#xff0c;对于这个中效果实现起来也是很简单的。毕竟依托于Springboot强大的框架&#xff0c;任何问…...

RESTful的意义及其使用规则

本文参考&#xff1a; https://javaguide.cn/system-design/basis/RESTfulAPI.html 何为 RESTful API&#xff1f; GET /classes&#xff1a;列出所有班级 POST /classes&#xff1a;新建一个班级RESTful API 可以让你看到 URLHttp Method 就知道这个 URL 是干什么的&…...

Linux产生死锁的必要条件和常见的锁种类

目录前言产生死锁的4个必要条件预防(解决)死锁Linux常见的锁互斥锁(普通锁)自旋锁互斥锁和自旋锁小结递归锁读写锁乐观锁与悲观锁乐观锁和悲观锁小结其他锁(了解)前言 之前面试的时候&#xff0c;有面试官问我产生死锁的(4个)必要条件&#xff0c;这个我之前有了解过&#xff…...

【HBase入门】8. HBase Java编程(2)——创建表、插入数据、删除数据

前言 本文是HBase Java编程&#xff08;2&#xff09;——创建表、插入数据、删除数据。 需求一&#xff1a;使用Java代码创建表 创建一个名为WATER_BILL的表&#xff0c;包含一个列蔟C1。 实现步骤&#xff1a; 1.判断表是否存在——存在&#xff0c;则退出 2.使用TableDe…...

【初识数据库】进入数据库的大门+数据库基本操作

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#x1f353;&#x1f353;&#x1f353;&#xff0c;这个专栏我将带领大家去探索数据库的汪洋大海&#xff0c;我主要使用的数据库软件是MySQL&#xff0c;数据库软件大同小异&#xff0c;嘿嘿嘿&#xff0c;废话不多说&#x…...

Python Flask 框架设置响应头,一篇文章学明白

flask 响应头设置&#x1f4d6; 导读&#x1f4d6; Python Flask 设置响应头&#x1f389; response.headers 属性&#x1f389; flask.abort() 函数返回特定状态码&#x1f4d6; Flask 中可设置的响应头参数&#x1f4d6; 其他关于响应头的配置&#x1f381; 使用中间件&#…...

阿里“云开发“小程序(uniCould)

博主ps&#xff1a; 网上资料少的可怜&#xff0c;哎&#xff0c;腾讯云涨价了&#xff0c;论服务器&#xff0c;我肯定选的阿里&#xff0c;再着你们对比下unicould的报价就知道了&#xff0c;如果有钱就另当别论了。 所以这片博文&#xff0c;博主试过之后&#xff0c;先抛出…...

Python装饰器使用方法详解

文章目录1 装饰器背景知识1.1 基本概念1.2 应用场景2 简单的装饰器代码3 使用装饰器记录函数执行次数4 带参数的装饰器5 装饰器处理有返回值的函数1 装饰器背景知识 1.1 基本概念 装饰器&#xff08;Decorator&#xff09;是 Python 中一种函数或类&#xff0c;用来修饰其他函…...

【Leetcode每日一题】69. x 的平方根/Sqrt(x)|二分查找---day3

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 目录题目描述题目分析&#xff1a;代码分析&#xff1a;题目描述 链接: 69. x 的平方根/Sqrt(x) 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术…...

2023.1完整版:适合的网盘,各大网盘对比测试,速度,安全性,可预计的未来

在网上看到过网盘对比&#xff0c;但发现还是不全&#xff0c;有时还是需要自行测试&#xff0c;所以这里我就给大家列出所有的网盘&#xff0c;也包括一些类似于网盘的平台&#xff1a; 注意&#xff1a;这里统计的平台都是至少要满足可以上传文件的网盘&#xff0c;并且包含个…...

【编程入门】开源记事本(安卓版)

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…...

Python流程控制语句之循环语句

上一篇&#xff1a;Python流程控制语句之选择语句 文章目录前言一、while 循环二、for 循环1. 进行数值循环2. 遍历字符串三、循环嵌套总结前言 生活中很多问题都无法一次解决&#xff0c;就像谚语所说&#xff1a;罗马不是一天建成的。一些事物必须周而复始地运转才能保证其存…...

17种编程语言+10种排序算法

开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言&#xff1a;C、C、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、PHP。 覆盖平台&#xff1a;安卓(Java、Kotlin)、iOS(SwiftUI)、Flutter(Dart)、Window桌面(C#)、前…...

【JavaSE专栏8】运算符、表达式和语句

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…...

【c语言进阶】常见的静态通讯录

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;c语言学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我…...

27. 作用域

1. 定义 作用域就是一个 python 程序可以直接访问命名空间的正文区域。 在一个 python 程序中&#xff0c;直接访问一个变量&#xff0c;会从内到外依次访问所有的作用域直到找到&#xff0c;否则会报未定义的错误。 python 中&#xff0c;程序的变量并不是在哪个位置都可以访…...

笔试题-2023-华为-数字芯片【纯净题目版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.29应聘岗位:数字IC设计题目评价 难易程度:★★★★☆知识覆盖:★★★★☆超纲范围:★☆☆☆☆值得一刷:★★★★☆文章目录 单…...

缓存失效问题和分布式锁引进

缓存失效问题 先来解决大并发读情况下的缓存失效问题&#xff1b; 1、缓存穿透  缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数 据库也无此记录&#xff0c;我们没有将这次查询的 null 写入缓存&#x…...

千峰学习【Ajax】总结

1.同步和异步 2.Ajax状态码 3.创建对象&#xff0c;发送请求 <script>//1.创建XHR&#xff1a; new XMLHttpRequest():var xhr new XMLHttpRequest();// console.log(xhr);//2&#xff0c;配置open(请求方式&#xff0c;请求地址&#xff0c;是否异步(默认为异步)) loc…...

主流的操作系统(带你快速了解)

&#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴。 &#x1f341; 操作系统【带你快速了解】对于电脑来说&#xff0c;如果说…...

【时间复杂度和空间复杂度】

1.时间复杂度时间复杂度的定义&#xff1a;在计算机科学中&#xff0c;算法的时间复杂度是一个数学函数&#xff0c;它定量描述了该算法的额外运行时间。一个算法执行所耗费的时间&#xff0c;从理论上说&#xff0c;是不能算出来的&#xff0c;只有你把你的程序放在机器上跑起…...

GPU虚拟化(留坑)

文章内容大程度参考B站王利明老师对《GPU虚拟化技术分享》的演讲&#xff1a;https://b23.tv/uQKBpcK GPU 有什么用&#xff1f; GPU可以用于图形渲染&#xff0c;也能够用于高性能计算和编解码等场景。 图&#xff1a;GPU 的典型软件架构&#xff08;不含虚拟化&#xff09; …...

排列的时候如何避免重复?

全排列问题&#xff1a;https://leetcode.cn/problems/permutations/submissions/全排列进阶&#xff08;有重复数字&#xff09;&#xff1a;https://leetcode.cn/problems/permutations-ii/solution/第一个全排列问题&#xff0c;经过千辛万苦终于理解了&#xff0c;于是来到…...

还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

element-ui-verify 本文章意在介绍element-ui-verify插件使用&#xff0c;以及对比elementUI原生校验方式&#xff0c;突显该插件用少量代码也能实现原生的校验效果甚至更好。 1.先观察一个示例 <template><d2-container><el-form :model"ruleForm&qu…...

读书笔记:mini-batch学习 ← 斋藤康毅

如果以全部数据为对象求损失函数的和&#xff0c;则计算过程需要花费较长的时间。因此&#xff0c;我们从全部数据中选出一部分&#xff0c;作为全部数据的“近似”。这种学习方式称为mini-batch学习。 下面给出了从MNIST数据集的训练数据中随机抽取10笔数据的代码。【mini-bat…...

基于微信小程序的新生自助报到系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…...

Python ·信用卡欺诈检测【Catboost】

Python 信用卡欺诈检测【Catboost】 提示&#xff1a;前言 Python 信用卡欺诈检测 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录Python 信用卡欺诈检测【Catboost】前言一、导入包二、加载数据三、数据可视化四、…...

【JavaEE初阶】第六节.多线程 (基础篇 )线程安全问题(下篇)

前言 一、内存可见性 二、内存可见性的解决办法 —— volatile关键字 三、wait 和notify 关键字 3.1 wait() 方法 3.2 notify() 方法 3.3 notify All() 方法 3.4 wait 和 sleep 的对比 总结 前言 本节内容接上小节有关线程安全问题&#xff1b;本节内容我们将介绍有关…...

JAVA练习30

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-加一 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 1月25日练习内容 …...

辗转相除以及辗转相减法

文章目录前言辗转相除法&#xff08;又名欧几里算法&#xff09;辗转相减法&#xff08;又名更相减损法&#xff09;原始辗转相减法改版辗转相减法&#xff08;减的是指数&#xff09;参考文章前言 在学习Acwing c蓝桥杯辅导课第八讲数论-AcWing 1223. 最大比例时有使用到求指…...

Java基础 IO

IO流 IO流 什么是IO流&#xff1f; 存储和读取数据的解决方案 I&#xff1a;input O&#xff1a;output 流&#xff1a;像水流一样传输数据 IO流的作用&#xff1f; 用于读写数据&#xff08;本地文件&#xff0c;网络&#xff09; IO流按照流向可以分类哪两种流&#xff1f…...

单一数字评估指标、迁移学习、多任务学习、端到端的深度学习

目录1.单一数字评估指标(a single number evaluation metric)有时候要比较那个分类器更好&#xff0c;或者哪个模型更好&#xff0c;有很多指标&#xff0c;很难抉择&#xff0c;这个时候就需要设置一个单一数字评估指标。例1&#xff1a;比较A&#xff0c;B两个分类器的性能&a…...

Linux | 一文带你真正搞懂Linux中的权限问题

在Linux下你有多少权限呢❓一、权限的基本概念二、Linux上的用户分类2.1 超级用户与普通用户2.2 用户之间的切换2.3 文件访问者的分类2.4 用户与访问者之间的联系三、文件属性与访问权限3.1 Linux下的文件类型&#xff08;1&#xff09;文件的八种类型&#xff08;2&#xff09…...

sql server【 特定分隔符隔开的字符串转表】和【 列转逗号隔开的字符串】

文章目录 引言I 特定分隔符隔开的字符串转表II Sql Server 列转逗号隔开的字符串2.1 多列转行,逗号分隔(字段拼接/字段分割)2.1 案例引言 Sql Server 列转逗号隔开的字符串 和 逆转,常用于数据导出和数据查询。 I 特定分隔符隔开的字符串转表 CREATE FUNCTION [dbo].[GetIDLi…...

分布式系统的一致性与共识算法(三)

顺序一致性(Sequential Consistency) ZooKeeper 一种说法是ZooKeeper是最终一致性&#xff0c;因为由于多副本、以及保证大多数成功的ZAB协议&#xff0c;当一个客户端进程写入一个新值&#xff0c;另外一个客户端进程不能保证马上就能读到这个值&#xff0c;但是能保证最终能…...

前端工程化,前端监控,工作流,部署,性能

开发规范 创建项目的时候&#xff0c;配置下 ESlint&#xff0c;stylelint&#xff0c; prettier&#xff0c; commitlint 等; ESLint 主要功能&#xff1a; ESLint 是一个静态代码检查工具&#xff0c;用于在 JavaScript 代码中识别和报告模式。它的目标是提供一个插件化的 …...

实验五 Spark Structured Streaming编程实践

一、编写程序 (1). 按照tag分组统计生成的日志数。 在新开的终端内输入 vi spark_exercise_testsyslog1.py &#xff0c;贴入如下代码并运行。运行之前需要关闭“tail终端”内的tail命令并重新运行tail命令&#xff0c;否则多次运行测试可能导致没有新数据生成。 #!/usr/bin…...

用大于meilisearch-java-0.7.0.jar的报错的解决

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…...

基于uniapp+vue3+ts开发微信小程序项目实战

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…...

OpenHarmony上移植memtester

1. 下载源码&#xff1a; wget https://pyropus.ca./software/memtester/old-versions/memtester-4.6.0.tar.gz 2. 解压并指定交叉编译方式 解压 tar -xvf memtester-4.6.0.tar.gz 修改conf-cc和conf-ld&#xff0c;指定交叉编译方式 conf-cc conf-ld 3. 编译 直接运行m…...

开发中遇到SQL IN传入参数的个数超过2100的bug

在SQL Server或者MySQL中&#xff0c;当你在IN子句中需要处理的结果集可能超过2100个元素时&#xff0c;由于SQL Server对IN子句中的参数数量存在大约2100个左右的限制&#xff0c;直接使用IN会导致错误。为了解决这个问题&#xff0c;可以采取以下策略&#xff1a; 1、将参数…...

C语言简要(一)

总得让她开心吧 helloworld #include <stdio.h>int main() {printf("hello world!\n");return 0; } 程序框架 #include <stdio.h> int main {return 0; }输出 printf("hello world!\n"); "里面的内容叫做“字符串”&#xff0c;prin…...

VS2022如何添加现有项

以 想在队列里&#xff0c;使用堆栈的.c&#xff0c;.h文件 为例 目录 1.复制堆栈的.c&#xff0c;.h文件 ​编辑 2.打开队列所在项目的文件夹 3.粘贴堆栈的.c&#xff0c;.h文件 4.在头文件和源文件添加相应的堆栈的.c&#xff0c;.h文件 1.复制堆栈的.c&#xff0c;.h文件…...

workerman 实现推送实时数据到前端

首先要说明一下&#xff0c;实时推送是有两个socket服务端和两个socket的客户端 我们分别起名叫做 外层服务端 &#xff08;开启服务主进程 创建一个 websoket 连接&#xff09;ws:// 内层服务端 &#xff08;在开户主进程的时候&#xff0c;内部又创建的一个 socket&#xff0…...

幻兽帕鲁Palworld服务器手动+docker部署方法+备份迁移

目录 帕鲁部署官方文档帕鲁手动安装法手动安装steamcmd通过steamcmd安装帕鲁后端 docker容器一键部署幻兽帕鲁绿联云NAS机器部署幻兽帕鲁客户端连接附录1&#xff1a;PalServer.sh的启动项附录2&#xff1a;配置文件游戏存档保存和迁移 关于阿里云计算巢 帕鲁部署官方文档 htt…...