ToB企服应用市场:ToB评测及商务社交产业平台
标题:
将独热码应用到神经网络中
[打印本页]
作者:
自由的羽毛
时间:
2024-7-17 10:58
标题:
将独热码应用到神经网络中
引言
接上回,本文继续说怎样用TensorFlow将独热编码应用到一个简朴的神经网络中,以实现从一段随机文本到另一段随机文本的转换。
步骤一:导入库
import tensorflow as tf
import numpy as np
import random
import string
复制代码
步骤二:天生随机文本数据
用一个函数来天生随机文本数据。
def generate_random_text(length):
letters = string.ascii_lowercase + ' '
return ''.join(random.choice(letters) for i in range(length))
random_text = generate_random_text(100)
print("Random Text:", random_text)
复制代码
步骤三:独热编码
接下来,我们将对天生的随机文本进行独热编码。为此,我们需要创建一个字符到整数的映射,并使用这个映射来构建独热编码。
注:上一张我们说的是几个分类(数字代表类别)转为独热码,那么怎样将一串文本转为独热码呢?在这里我们的方法是将一串文本的每个字符都对应到一个数字(这个过程就我们叫做映射到数字,这个对应关系的表就成为词汇表),之后从数字天生独热码。把所有数字的独热码放一起,就是这段文本的独热码了。
chars = string.ascii_lowercase + ' '
char_to_int = {c: i for i, c in enumerate(chars)}
int_to_char = {i: c for c, i in char_to_int.items()}
def one_hot_encode(text):
encoded = [char_to_int[char] for char in text]
return tf.one_hot(encoded, depth=len(chars))
encoded_text = one_hot_encode(random_text)
复制代码
步骤四:构建神经网络模子
现在,让我们定义一个简朴的麋集神经网络模子(后期讲),它将担当独热编码的文本并尝试猜测下一个字符的独热编码。
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(None, len(chars))),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(len(chars), activation='softmax')
])
复制代码
步骤五:练习模子
因为作者个人感觉用随机数据练习没什么意义,也拟合不出什么,所以省略了…
步骤六:模子猜测与解码
我们直接用没练习过的模子来猜测输入文本的输出,并将其从独热编码转换回字符。
def decode_one_hot(output):
return ''.join(int_to_char[np.argmax(out)] for out in output)
# 假设我们已经训练了模型
# predictions = model.predict(encoded_text)
# decoded_text = decode_one_hot(predictions)
# print("Decoded Text:", decoded_text)
复制代码
一些话
虽然我们学了很多关于独热码的知识,但是…对于我们的语言模子没有什么卵用…我们用的是字符索引加嵌入层方法(背面细讲)而不是独热码,具体原因:
独热码(One-Hot Encoding)
上风
:
简朴直观
:每个字符都由一个独立的二进制位表示,这使得编码非常明确和直接。
易于理解
:模子的输入维度与词汇表大小直接相关,轻易理解息争释。
无参数共享
:每个字符的表示独立,不会受到其他字符的影响,这在某些情况下可能是有益的。
缺点
:
维度灾难
:如果词汇表很大,独热编码会导致极其高维的特征空间,这会增长计算复杂性和存储需求。
缺乏语义信息
:独热编码不包罗任何关于字符之间关系的语义信息,即字符之间的相似性或关联性完全被忽略。
不变性
:对于字符的微小变革(如大小写、拼写错误等),独热编码无法提供鲁棒性。
字符索引 + 嵌入层(Character Index + Embedding Layer)
上风
:
维度低落
:通过使用较低维度的麋集向量来表示字符,嵌入层可以有用减少模子的输入维度。
捕捉语义信息
:嵌入层可以学习字符之间的语义关系,使得相似的字符在嵌入空间中拥有相似的表示。
参数共享
:嵌入层中的参数是在所有字符之间共享的,这可以减少模子的总参数数量,进步泛化能力。
鲁棒性
:嵌入层可以对字符的小变革具有肯定的鲁棒性,比方拼写错误或大小写变革。
缺点
:
需要大量数据
:为了有用地学习嵌入,通常需要大量的练习数据。
调参复杂
:嵌入层的维度和其他超参数需要仔细调整,以找到最佳配置。
黑盒性质
:嵌入层学到的表示可能不如独热编码那样直观易懂。
有问题可以私信,看到会回复。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4