赞
踩
接上回,本文继续说如何用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)
虽然我们学了很多关于独热码的知识,但是…对于我们的语言模型没有什么卵用…我们用的是字符索引加嵌入层方法(后面细讲)而不是独热码,具体原因:
优势:
缺点:
优势:
缺点:
有问题可以私信,看到会回复。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。