pytorch中如何将标签换成数字

pytorch中如何将标签换成数字,第1张

你是需要将数字转换成条形码标签吗?在条码软件中是可以实现的,步骤如下:

随着条形码使用率的增加,制作生成条形码也成了众多厂家必不可少的工作。那么当我们将申请下来的条形码数据编好之后该如何将其转换成条形码呢?本文我们就条形码软件来为大家演示下如何将数字转换成条形码。

首先,我们可以先将所有的条码数据录入保存在Excel中,一个单元格一个,以竖列、文本格式保存。

下面打开条形码软件看一下数字转换成条形码的详细步骤:

一、将数字导入中琅条形码软件 打开软件后需要先设置好纸张尺寸,然后点击软件上方工具栏中的“数据库设置”,点击“添加”,选择Excel数据源管理,然后在d出页面中点击“浏览”,选择需要导入的保存有条码数据的Excel表,然后点击“测试连接”,查看下方记录总数正确即可点击“添加”完成导入数据。

二、添加条形码 点击条形码软件左侧工具栏中的条形码图标,在画布上绘制条码样式:

绘制条形码之后,双击打开“图形属性-数据源”页面,点击左侧修改按钮,在d出页面中选择数据库导入,然后核对下方连接数据源以及字段名称是否正确,确认后点击“编辑-确定”即可。

第一个条形码数据设置好之后,其实就已经将Excel表中的全部数字转换成条形码了,可以点击打印预览翻页查看生成效果:

明敏 发自 凹非寺

量子位 报道 | 公众号 QbitAI

到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰?

还别说,这个bug虽小,但有够“狡猾”的。

这就是最近Reddit上热议的一个话题,是一位网友在使用再平常不过的Pytorch+Numpy组合时发现。

最主要的是,在代码能够跑通的情况下,它甚至还会影响模型的准确率!

除此之外,网友热议的另外一个点,竟然是:

而是它到底算不算一个bug?

这究竟是怎么一回事?

事情的起因是一位网友发现,在PyTorch中用NumPy来生成随机数时,受到数据预处理的限制,会多进程并行加载数据,但最后每个进程返回的随机数却是相同的。

他还举出例子证实了自己的说法。

如下是一个示例数据集,它会返回三个元素的随机向量。这里采用的批量大小分别为2,工作进程为4个。

然后神奇的事情发生了:每个进程返回的随机数都是一样的。

这个结果会着实让人有点一头雾水,就好像数学应用题求小明走一段路程需要花费多少时间,而你却算出来了负数。

发现了问题后,这位网友还在GitHub上下载了超过10万个PyTorch库,用同样的方法产生随机数。

结果更加令人震惊:居然有超过95%的库都受到这个问题的困扰!

这其中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也承认自己“被坑过”!

但有一说一,这个bug想要解决也不难:只需要在每个epoch都重新设置seed,或者用python内置的随机数生成器就可以避免这个问题。

到底是不是bug?

如果这个问题已经可以解决,为什么还会引起如此大的讨论呢?

因为网友们的重点已经上升到了“哲学”层面:

这到底是不是一个bug?

在Reddit上有人认为:这不是一个bug。

虽然这个问题非常常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。

就是这个观点,激起了千层浪花,许多人都认为他忽略了问题的关键所在。

这不是产生伪随机数的问题,也不是numpy的问题,问题的核心是在于PyTorch中的DataLoader的实现

对于包含随机转换的数据加载pipeline,这意味着每个worker都将选择“相同”的转换。而现在NN中的许多数据加载pipeline,都使用某种类型的随机转换来进行数据增强,所以不重新初始化可能是一个预设。

另一位网友也表示这个bug其实是在预设程序下运行才出现的,应该向更多用户指出来。

并且95%以上的Pytorch库受此困扰,也绝不是危言耸听。

有人就分享出了自己此前的惨痛经历:

我认识到这一点是之前跑了许多进程来创建数据集时,然而发现其中一半的数据是重复的,之后花了很长的时间才发现哪里出了问题。

也有用户补充说,如果 95% 以上的用户使用时出现错误,那么代码就是错的。

顺便一提,这提供了Karpathy定律的另一个例子:即使你搞砸了一些非常基本代码,“neural nets want to work”。

你有踩过PyTorch的坑吗?

如上的bug并不是偶然,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上还有PyTorch的坑之总结,被浏览量高达49w。

其中从向量、函数到model.train(),无论是真bug还是自己出了bug,大家的血泪史还真的是各有千秋。

所以,关于PyTorch你可以分享的经验血泪史吗?

欢迎评论区留言讨论~

参考链接:

[1]https://tanelp.github.io/posts/a-bug-that-plagues-thousands-of-open-source-ml-projects/

[2]https://www.reddit.com/r/MachineLearning/comments/mocpgj/p_using_pytorch_numpy_a_bug_that_plagues/

[3]https://www.zhihu.com/question/67209417/answer/866488638

— 完 —

这里主要进行分词,词汇表构造以及词汇索引构造

包括 batch_size, embedding_size, 窗口大小和词汇表大小

这里就是将数据包装为torch.utils.data.Dataset类,并且用DataLoader类来加载数据

假设所有文本分词,转为索引之后的 list 如下图所示

根据论文所述,我这里设定 window size=2,即每个中心词左右各取 2 个词作为背景词,那么对于上面的 list,窗口每次滑动,选定的中心词和背景词如下图所示

那么 skip_grams 变量里存的就是中心词和背景词一一配对后的 list,例如中心词 2,有背景词 0,1,0,1,一一配对以后就会产生 [2,0],[2,1],[2,0],[2,1]。skip_grams 如下图所示

由于 Word2Vec 的输入是 one-hot 表示,所以我们先构建一个单位矩阵,利用 np.eye(rows) 方法,其中的参数 rows 表示单位矩阵的行数,对于这个问题来说,语料库中总共有多少个单词,就有多少行。

然后根据 skip_grams 每行第一列的值,取出相应的行。将这些取出的行,append 到一个 list 中去,最终的这个 list 就是所有的样本 X(即one-hot表示)。标签不需要 one-hot 表示,只需要类别值,所以只用把 skip_grams 中每行的第二列取出来存起来即可

最后第三步就是构建 dataset,然后定义 DataLoader

模型架构图:

注意,隐层的激活函数是线性的,相当于没做任何处理。训练这个神经网络,用反向传播算法(本质上是链式求导)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7881286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存