Tensorflow实现hihello预测

from tensorflow.keras import models, losses, layers, activations, optimizers
from tensorflow.keras import utils
import numpy as np

# 11.按照要求使用keras,搭建rnn处理以下内容 sample = "hihello"
# (1)数据预处理
# ①将出现的单词按照字典形式进行处理
sample = "hihello"
str_list = list(set(sample))
word2id = {j: i for i, j in enumerate(str_list)}
id2word = {i: j for i, j in enumerate(str_list)}
# ②使用上面的sample,将hihell作为特征,ihello作为标签
x_str = sample[:-1]
y_str = sample[1:]
x = [word2id[i] for i in x_str]
y = [word2id[i] for i in y_str]
seq_len = max(len(x), len(y))
char_dim = len(str_list)
# ③设置合理的时间序列,将x进行对应的处理
x = utils.to_categorical(x, num_classes=char_dim)
y = utils.to_categorical(y, num_classes=char_dim)

x = np.reshape(x, (-1, len(x), char_dim))
y = np.reshape(y, (-1, len(y), char_dim))


# (2)模型操作
# ①使用LSTM模型进行处理
# ②叠加一层lstm模型,元素数量相同
# ③使用对应方式将数据进行softmax处理
class LSTM(models.Model):
def __init__(self):
super(LSTM, self).__init__()
self.lstm = models.Sequential([
layers.LSTM(units=char_dim, input_shape=(seq_len, char_dim), return_sequences=True),
layers.LSTM(units=char_dim, return_sequences=True),
layers.TimeDistributed(layers.Dense(units=char_dim, activation=activations.softmax))
])

def call(self, inputs, training=None, mask=None):
out = self.lstm(inputs)
return out


# ④合理编译模型
if __name__ == '__main__':
model = LSTM()
model.build(input_shape=(None, seq_len, char_dim))
model.compile(optimizer=optimizers.Adam(learning_rate=0.1), loss=losses.categorical_crossentropy, metrics='acc')
# ⑤训练模型
model.fit(x, y, epochs=30)
# ⑥预测结果
pre = model.predict(x)
# ⑦将预测结果进行打印,核对结果
for i in pre:
pre_id = np.argmax(i, axis=1)
char = [id2word[i] for i in pre_id]
print(''.join(char))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值