免费建网站 手机网站,沈阳网是什么公司,杭州营销型网站建设排名,京东网站的公司地址#x1f368; 本文为#xff1a;[#x1f517;365天深度学习训练营] 中的学习记录博客 #x1f356; 原作者#xff1a;[K同学啊 | 接辅导、项目定制] 一、 独热编码原理 独热编码#xff08;One-Hot Encoding#xff09;是一种将分类数据转换为二进制向量的方法#… 本文为[365天深度学习训练营] 中的学习记录博客 原作者[K同学啊 | 接辅导、项目定制] 一、 独热编码原理 独热编码One-Hot Encoding是一种将分类数据转换为二进制向量的方法其中每个类别对应一个唯一的二进制向量。在独热编码中每个类别都由一个长度为n的向量表示其中n是所有可能类别的数量。向量中的每个位置对应一个可能的类别该位置上的值是1或0表示该实例是否属于该类别。 例如假设我们有四个类别A、B、C和D。使用独热编码我们可以将它们表示为
A: [1, 0, 0, 0]B: [0, 1, 0, 0]C: [0, 0, 1, 0]D: [0, 0, 0, 1] 独热编码的优点包括 处理分类数据独热编码允许分类数据被模型处理因为许多机器学习算法和神经网络都要求输入是数字。 无序性独热编码假设类别之间没有顺序关系每个类别都是相互独立的。 稀疏性独热编码产生的向量通常是稀疏的这意味着大多数位置的值都是0只有少数几个位置的值是1。这种稀疏性在某些情况下可以减少模型复杂性。 兼容性独热编码可以与多种机器学习算法兼容包括逻辑回归、支持向量机、决策树、随机森林、神经网络等。 在Python中可以使用多种库来实现独热编码例如pandas的get_dummies函数或scikit-learn的OneHotEncoder类。 这样的表示方式有助于模型更好地理解文本含义。在深度学习中神经网络的输入层通常使用one-hot编码来表示分类变量。这种编码方式不仅能够避免不必要的关系假设还能够提供清晰的输入表示有助于模型的学习和泛化。 例如
John likes to watch movies. Mary likes too
John also likes to watch football games.以上两句可以构造一个词典
{John: 1, likes: 2, to: 3, watch: 4, movies: 5, also: 6, football: 7, games: 8, Mary: 9, too: 10}One-hot可表示为
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
其余类推。
二、 案例
2.1 英文案例
import torch
import torch.nn.functional as F# 示例文本
texts [Hello, how are you?, I am doing well, thank you!, Goodbye.]# 构建词汇表
word_index {}
index_word {}
for i, word in enumerate(set( .join(texts).split())):word_index[word] iindex_word[i] word# 将文本转化为整数序列
sequences [[word_index[word] for word in text.split()] for text in texts]# 获取词汇表大小
vocab_size len(word_index)# 将整数序列转化为one-hot编码
one_hot_results torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):one_hot_results[i, seq] 1# 打印结果
print(词汇表:)
print(word_index)
print(\n文本:)
print(texts)
print(\n文本序列:)
print(sequences)
print(\nOne-Hot编码:)
print(one_hot_results)输出结果为
词汇表:
{doing: 0, well,: 1, I: 2, how: 3, thank: 4, you!: 5, am: 6, Hello,: 7, are: 8, you?: 9, Goodbye.: 10}文本:
[Hello, how are you?, I am doing well, thank you!, Goodbye.]文本序列:
[[7, 3, 8, 9], [2, 6, 0, 1, 4, 5], [10]]One-Hot编码:
tensor([[0., 0., 0., 1., 0., 0., 0., 1., 1., 1., 0.],[1., 1., 1., 0., 1., 1., 1., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])Process finished with exit code 02.2 中文案例
import torch
import torch.nn.functional as F# 示例中文文本
texts [你好最近怎么样, 我过得很好谢谢, K同学啊]# 构建词汇表
word_index {}
index_word {}
for i, word in enumerate(set(.join(texts))):word_index[word] iindex_word[i] word# 将文本转化为整数序列
sequences [[word_index[word] for word in text] for text in texts]# 获取词汇表大小
vocab_size len(word_index)# 将整数序列转化为one-hot编码
one_hot_results torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):one_hot_results[i, seq] 1# 打印结果
print(词汇表:)
print(word_index)
print(\n文本:)
print(texts)
print(\n文本序列:)
print(sequences)
print(\nOne-Hot编码:)
print(one_hot_results)输出结果为
词汇表:
{: 0, 谢: 1, 你: 2, 怎: 3, 好: 4, 学: 5, 近: 6, 么: 7, 同: 8, 最: 9, 样: 10, 很: 11, 我: 12, : 13, 得: 14, 过: 15, K: 16, 啊: 17, : 18}文本:
[你好最近怎么样, 我过得很好谢谢, K同学啊]文本序列:
[[2, 4, 13, 9, 6, 3, 7, 10, 18], [12, 15, 14, 11, 4, 13, 1, 1, 0], [16, 8, 5, 17]]One-Hot编码:
tensor([[0., 0., 1., 1., 1., 0., 1., 1., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0.,1.],[1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 0., 0.,0.],[0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1.,0.]])Process finished with exit code 0可以注意到上面的案例是以字为基本单位的但词语被拆分开后显然会失去原有的意思。在下面的案例中我们使用jieba分词工具对句子进行划分。 使用结巴分词jieba进行中文文本的分词处理然后将分词后的结果转化为one-hot编码。首先确保你已经安装了结巴分词库。
pip install jieba
接着运行下述代码
import torch
import torch.nn.functional as F
import jieba# 示例中文文本
texts [你好最近怎么样, 我过得很好谢谢, 再见。]# 使用结巴分词进行分词
tokenized_texts [list(jieba.cut(text)) for text in texts]# 构建词汇表
word_index {}
index_word {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] iindex_word[i] word# 将文本转化为整数序列
sequences [[word_index[word] for word in text] for text in tokenized_texts]# 获取词汇表大小
vocab_size len(word_index)# 将整数序列转化为one-hot编码
one_hot_results torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):one_hot_results[i, seq] 1# 打印结果
print(词汇表:)
print(word_index)
print(\n文本:)
print(texts)
print(\n分词结果)
print(tokenized_texts)
print(\n文本序列:)
print(sequences)
print(\nOne-Hot编码:)
print(one_hot_results)输出结果为
词汇表:
{: 0, 再见: 1, : 2, : 3, 得: 4, 你好: 5, 。: 6, 很: 7, 最近: 8, 谢谢: 9, 我过: 10, 怎么样: 11, 好: 12}文本:
[你好最近怎么样, 我过得很好谢谢, 再见。]分词结果
[[你好, , 最近, 怎么样, ], [我过, 得, 很, 好, , 谢谢, ], [再见, 。]]文本序列:
[[5, 0, 8, 11, 2], [10, 4, 7, 12, 0, 9, 3], [1, 6]]One-Hot编码:
tensor([[1., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0.],[1., 0., 0., 1., 1., 0., 0., 1., 0., 1., 1., 0., 1.],[0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]])Process finished with exit code 0在ACGAN中判别器的整体结构包括两部分一个是用于判断样本真伪的主分类器另一个是用于预测条件类别的辅助分类器。以下是判别器的整体结构 共享的特征提取层判别器的主分类器和辅助分类器通常共享相同的特征提取层。这意味着它们使用相同的网络层来提取输入样本的特征。 主分类器分支特征提取层的输出被送入主分类器分支这个分支通常是一个或几个全连接层用于预测样本是真来自真实数据分布还是假来自生成器。 辅助分类器分支同时特征提取层的输出也被送入辅助分类器分支用于预测样本的条件类别。 损失函数和优化判别器的总损失是主分类器损失和辅助分类器损失的加权组合。在训练过程中优化器会同时最小化这两个损失以更新判别器的权重。 通过这种方式ACGAN的判别器不仅能够区分真实和生成的样本还能够准确预测样本的类别从而为生成器提供了更具体的指导使其能够生成具有特定条件属性的数据。
三、任务
运行代码
import torch
import jieba#打开txt文件的方式
texts open(任务.txt, r,encodingutf-8).read().split(\n)
print(texts)# 使用结巴分词进行分词
tokenized_texts [list(jieba.cut(text)) for text in texts]# 构建词汇表
word_index {}
index_word {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):word_index[word] iindex_word[i] word# 将文本转化为整数序列
sequences [[word_index[word] for word in text] for text in tokenized_texts]# 获取词汇表大小
vocab_size len(word_index)# 将整数序列转化为one-hot编码
one_hot_results torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):one_hot_results[i, seq] 1# 打印结果
print(词汇表:)
print(word_index)
print(\n文本:)
print(texts)
print(\n分词结果)
print(tokenized_texts)
print(\n文本序列:)
print(sequences)
print(\nOne-Hot编码:)
print(one_hot_results)输出结果
[比较直观的编码方式是采用上面提到的字典序列。, 例如对于一个有三个类别的问题可以用1、2和3分别表示这三个类别。, 但是这种编码方式存在一个问题就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系, 而实际上这些关系可能是不存在的或者不具有实际意义的为了避免这种问题引入了one-hot编码也称独热编码。, one-hot编码的基本思想是将每个类别映射到一个向量其中只有一个元素的值为1其余元素的值为0。, 这样每个类别之间就是相互独立的不存在顺序或距离关系。, 例如对于三个类别的情况可以使用如下的one-hot编码, 这是K同学啊的“365天深度学习训练营”教案内容]
词汇表:
{提到: 0, 是: 1, 而: 2, 顺序: 3, 称: 4, 训练营: 5, 字典: 6, 内容: 7, 不同: 8, 问题: 9, 编码: 10, 每个: 11, 独热: 12, K: 13, 这是: 14, 例如: 15, 映射: 16, 3: 17, 情况: 18, 教案: 19, 表示: 20, 基本: 21, 向量: 22, 对于: 23, 可以: 24, 存在: 25, 将: 26, : 27, 了: 28, 到: 29, 元素: 30, 地: 31, 采用: 32, 值: 33, 为了: 34, 啊: 35, 或: 36, 或者: 37, “: 38, 认为: 39, 避免: 40, 这些: 41, 编码方式: 42, 为: 43, 一个: 44, 分别: 45, 。: 46, 就是: 47, 一些: 48, 之间: 49, 不: 50, 具有: 51, 使用: 52, 深度: 53, 学习: 54, 和: 55, 比较: 56, hot: 57, 模型: 58, 实际上: 59, 1: 60, 可能: 61, 错误: 62, 其余: 63, : 64, : 65, 距离: 66, 会: 67, -: 68, 这样: 69, 相互: 70, 关系: 71, 直观: 72, 思想: 73, 序列: 74, 如下: 75, 其中: 76, 实际意义: 77, ”: 78, 独立: 79, 有: 80, 365: 81, 天: 82, 三个: 83, 也: 84, 用: 85, 这: 86, 但是: 87, 引入: 88, one: 89, 这种: 90, 的: 91, 0: 92, 、: 93, 2: 94, 上面: 95, 只有: 96, 同学: 97, : 98, 类别: 99}文本:
[比较直观的编码方式是采用上面提到的字典序列。, 例如对于一个有三个类别的问题可以用1、2和3分别表示这三个类别。, 但是这种编码方式存在一个问题就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系, 而实际上这些关系可能是不存在的或者不具有实际意义的为了避免这种问题引入了one-hot编码也称独热编码。, one-hot编码的基本思想是将每个类别映射到一个向量其中只有一个元素的值为1其余元素的值为0。, 这样每个类别之间就是相互独立的不存在顺序或距离关系。, 例如对于三个类别的情况可以使用如下的one-hot编码, 这是K同学啊的“365天深度学习训练营”教案内容]分词结果
[[比较, 直观, 的, 编码方式, 是, 采用, 上面, 提到, 的, 字典, 序列, 。], [例如, , 对于, 一个, 有, 三个, 类别, 的, 问题, , 可以, 用, 1, 、, 2, 和, 3, 分别, 表示, 这, 三个, 类别, 。], [但是, , 这种, 编码方式, 存在, 一个, 问题, , 就是, 模型, 可能, 会, 错误, 地, 认为, 不同, 类别, 之间, 存在, 一些, 顺序, 或, 距离, 关系], [而, 实际上, 这些, 关系, 可能, 是, 不, 存在, 的, 或者, 不, 具有, 实际意义, 的, , 为了, 避免, 这种, 问题, , 引入, 了, one, -, hot, 编码, , 也, 称, 独热, 编码, , 。], [one, -, hot, 编码, 的, 基本, 思想, 是, 将, 每个, 类别, 映射, 到, 一个, 向量, , 其中, 只有, 一个, 元素, 的, 值, 为, 1, , 其余, 元素, 的, 值, 为, 0, 。], [这样, , 每个, 类别, 之间, 就是, 相互, 独立, 的, , 不, 存在, 顺序, 或, 距离, 关系, 。], [例如, , 对于, 三个, 类别, 的, 情况, , 可以, 使用, 如下, 的, one, -, hot, 编码, ], [这是, K, 同学, 啊, 的, “, 365, 天, 深度, 学习, 训练营, ”, 教案, 内容]]文本序列:
[[56, 72, 91, 42, 1, 32, 95, 0, 91, 6, 74, 46], [15, 27, 23, 44, 80, 83, 99, 91, 9, 27, 24, 85, 60, 93, 94, 55, 17, 45, 20, 86, 83, 99, 46], [87, 27, 90, 42, 25, 44, 9, 27, 47, 58, 61, 67, 62, 31, 39, 8, 99, 49, 25, 48, 3, 36, 66, 71], [2, 59, 41, 71, 61, 1, 50, 25, 91, 37, 50, 51, 77, 91, 27, 34, 40, 90, 9, 27, 88, 28, 89, 68, 57, 10, 65, 84, 4, 12, 10, 98, 46], [89, 68, 57, 10, 91, 21, 73, 1, 26, 11, 99, 16, 29, 44, 22, 27, 76, 96, 44, 30, 91, 33, 43, 60, 27, 63, 30, 91, 33, 43, 92, 46], [69, 27, 11, 99, 49, 47, 70, 79, 91, 27, 50, 25, 3, 36, 66, 71, 46], [15, 27, 23, 83, 99, 91, 18, 27, 24, 52, 75, 91, 89, 68, 57, 10, 64], [14, 13, 97, 35, 91, 38, 81, 82, 53, 54, 5, 78, 19, 7]]One-Hot编码:
tensor([[1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 1., 0., 0., 0., 1., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1.,0., 0., 1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0.,0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 1., 1., 0., 0., 0.,0., 1., 0., 1., 1., 0., 0., 0., 0., 1.],[0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,1., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 1., 1., 1., 0., 0., 0., 0.,0., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0., 1., 1., 0., 0., 0., 1.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],[0., 1., 1., 0., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 1., 0., 0., 0., 0., 0., 1., 0.,0., 1., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0.,0., 0., 0., 1., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 0., 1.,0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1.,1., 1., 0., 0., 0., 0., 0., 0., 1., 0.],[0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0.,0., 0., 0., 1., 1., 0., 0., 0., 1., 1., 0., 1., 1., 0., 0., 1., 0., 0.,0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0.,0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,0., 1., 1., 0., 0., 0., 1., 0., 0., 1.],[0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1., 1., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 1.,0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 1., 0., 0., 0., 0., 0., 0., 0., 1.],[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0.,1., 0., 0., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0.,0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.,0., 1., 0., 0., 0., 0., 0., 0., 0., 1.],[0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.,0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0.,0., 1., 0., 0., 0., 0., 0., 1., 0., 0.]])Process finished with exit code 0四、总结 本周任务较为简单不做多余总结