平安夜,给女同学写了份不得了的代码
Posted K同学啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平安夜,给女同学写了份不得了的代码相关的知识,希望对你有一定的参考价值。
本文已加入 🚀 Python AI 计划,从一个Python小白到一个AI大神,你所需要的所有知识都在 这里 了。
🚀 我的环境:
- 语言环境:Python3.6.5
- 编译器:jupyter notebook
- 深度学习环境:TensorFlow2.4.1
- 数据和代码:📌【传送门】
🚀 来自专栏:《深度学习100例》
如果你是一名深度学习小白可以先看看我这个专门为你写的专栏:《小白入门深度学习》
一、导入数据
from tensorflow import keras
from tensorflow.keras import datasets, layers, models
import os,PIL
import numpy as np
import pandas as pd
#隐藏警告
import warnings
warnings.filterwarnings('ignore')
import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")
if gpus:
gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU
tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用
tf.config.set_visible_devices([gpu0],"GPU")
print(gpus)
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
1. 导入文件
text = open("30640.txt", 'rb').read().decode(encoding='utf-8')
vocab = sorted(set(text))
print(vocab[100:120])
['乐', '乖', '乘', '乙', '九', '乞', '也', '习', '乡', '书', '买', '乱', '乳', '乾', '了', '予', '争', '事', '二', '于']
2. 文本数字化
# 数字化
char2idx = u: i for i, u in enumerate(vocab)
idx2char = np.array(vocab)
text_as_int = np.array([char2idx[c] for c in text])
len(text_as_int)
3253148
BATCH_SIZE = 128 # 批大小
# 设定每个输入句子长度的最大值
seq_length = 500
examples_per_epoch = len(text) // seq_length
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
sequences = char_dataset.batch(seq_length + 1, drop_remainder=True)
def split_input_target(chunk):
input_text = chunk[:-1]
target_text = chunk[1:]
return input_text, target_text
dataset = sequences.map(split_input_target)
dataset = dataset.batch(BATCH_SIZE, drop_remainder=True) #.shuffle(1000)
二、构建GRU模型
embedding_dim = 256 # 嵌入的维度
def build_model(embedding_dim, batch_size):
model = tf.keras.Sequential([
tf.keras.layers.Embedding(len(vocab), embedding_dim, batch_input_shape=[batch_size, None]),
tf.keras.layers.GRU(1024, return_sequences=True, stateful=True, recurrent_initializer='glorot_uniform'),
tf.keras.layers.Dense(len(vocab))
])
return model
model = build_model(embedding_dim=embedding_dim, batch_size=BATCH_SIZE)
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (128, None, 256) 980480
_________________________________________________________________
gru (GRU) (128, None, 1024) 3938304
_________________________________________________________________
dense (Dense) (128, None, 3830) 3925750
=================================================================
Total params: 8,844,534
Trainable params: 8,844,534
Non-trainable params: 0
_________________________________________________________________
三、编译
def loss(labels, logits):
return tf.keras.losses.sparse_categorical_crossentropy(labels, logits,from_logits=True)
model.compile(optimizer='adam', loss=loss)
四、训练
checkpoint_dir = './training_checkpoints' # 模型保存至的目录
checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_epoch") # 模型保存的文件名
checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_prefix, save_weights_only=True)
EPOCHS = 200 #训练次数
history = model.fit(dataset, epochs=EPOCHS, callbacks=[checkpoint_callback])
Epoch 1/200
50/50 [==============================] - 15s 237ms/step - loss: 6.1918
Epoch 2/200
50/50 [==============================] - 12s 235ms/step - loss: 5.2278
......
50/50 [==============================] - 12s 233ms/step - loss: 1.0495
Epoch 196/200
50/50 [==============================] - 12s 244ms/step - loss: 1.0472
Epoch 197/200
50/50 [==============================] - 12s 233ms/step - loss: 1.0511
Epoch 198/200
50/50 [==============================] - 12s 233ms/step - loss: 1.0502
Epoch 199/200
50/50 [==============================] - 12s 233ms/step - loss: 1.0498
Epoch 200/200
50/50 [==============================] - 12s 233ms/step - loss: 1.0477
五、重新加载模型
tf.train.latest_checkpoint(checkpoint_dir)
model = build_model(embedding_dim, batch_size=1)
model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
model.build(tf.TensorShape([1, None]))
# 查看模型
model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (1, None, 256) 980480
_________________________________________________________________
gru_1 (GRU) (1, None, 1024) 3938304
_________________________________________________________________
dense_1 (Dense) (1, None, 3830) 3925750
=================================================================
Total params: 8,844,534
Trainable params: 8,844,534
Non-trainable params: 0
_________________________________________________________________
六、生成文本
def generate_text(model, start_string):
num_generate = 1000
# 将起始字符串转换为数字(向量化)
input_eval = [char2idx[s] for s in start_string]
input_eval = tf.expand_dims(input_eval, 0)
# 存储结果
text_generated = []
"""
temperature->小:生成更可预测的文本
temperature->大:生成更令人惊讶的文本
"""
temperature = 0.5
# 这里批大小为 1
model.reset_states()
for i in range(num_generate):
predictions = model(input_eval)
# 删除批次的维度
predictions = tf.squeeze(predictions, 0)
# 用分类分布预测模型返回的字符
predictions = predictions / temperature
predicted_id = tf.random.categorical(predictions, num_samples=1)[-1, 0].numpy()
# 把预测字符和前面的隐藏状态一起传递给模型作为下一个输入
input_eval = tf.expand_dims([predicted_id], 0)
text_generated.append(idx2char[predicted_id])
return (start_string + ''.join(text_generated))
# 生成文本
result = str(generate_text(model, start_string="唐三"))
print(result)
唐三猜测过……”
唐三微微一笑,道:“爸,您是什么人?”
唐三赶忙道:“前辈,您说的没错。如果不能亲和前辈分,我只问您一句,你说的是,叔叔会无视你,还是为了脱离这个原因。”
“是。”
唐三心中一动,“你回去吧。后面的将来,我还要谢谢你。”
唐三正拍卖场专门解『药』。此时再走,集中自己睡于虚无旁,要不是他手里能够相当的,就算是自己的父亲,也未必就留他们一起去活泼生。那么曾经给自己留学院的小白告诉过他们。他们都想看看,这些本就是他们大恩特殊的魂兽,这次就是她自己的母亲。她也同意不清自保是外欺自己的。怎么说她也是一万天才可以的。如果说一个月的话,他对我们有什么好处呢?只是,她告诉我,这个地方,我留着小舞,年龄、生生、工钱,才能有四成把握。同等级的工夫我还保守超过我,这岂不是去请取得我么?”
唐三微微一笑,道:“那就走吧,我们去那里吧。这里也就是我们四个人中消融的东西。我们走吧。”
说到这里,小舞忍不住道:“妈妈,你不该说她是神?但是,我现还不到十二岁,我们还都处于身边的人,还有额外的痛快他吧?”
唐三微微一笑,道:“是。等你们休息休息休息。他们看到了,你们还都不休息休息。”
“哦?”这次轮到唐三悲愤的声音,很明显,这个声音是他的话,但也同时不敢反应过来,眼底气怒这似乎并不算太多,但眼前这个人实不能平静,唐三想继续向瀑布问问,而是他手中抓住的。
“不离开小舞,你这是怎么了?怎么了?”唐三吓了一跳。赶忙跑过去,可他地身体却是那样的虚弱,小舞身上鼓起的相貌,一双有什么似的,向她吐了吐血吐去。
“小三醒过来了,我们现都还活着。”小舞的脸『色』看上去都有些怪异,但很重哭,他甚至丢下都有些怪听,声音中,她仿佛想要将自己幸运才到了唐三面前,“你一个人敢,我死你手里,你的强韧……”
小舞俏脸微红,然后俏脸上流『露』出一丝冷笑,“你说吧?什么眼神都不是说我是神界的么?”
唐三微微一笑,道:“这也太差了反倒。你明白了么?”
唐三微微一笑,道:“你这么早就不出『色』,但竞争者所拥有的权威,我要比您高谈强,英俊以及我成为了计划,现可以帮助下将你们吸引前舞的情况,但同样也没有打击我的机会,何况,我偏怀中毒下观
最后再送大家一本,帮助大家拿到 BAT 等一线大厂 offer 的数据结构刷题笔记,是谷歌和阿里的大佬写的,对于算法薄弱或者需要提高的同学都十分受用(提取码:9go2 ):
以及我整理的7K+本开源电子书,总有一本可以帮到你 💖(提取码:4eg0)
💖先赞后看,再收藏,养成好习惯!💖
以上是关于平安夜,给女同学写了份不得了的代码的主要内容,如果未能解决你的问题,请参考以下文章
转行测试,11k入职,我写了份1000多字的分享,每一笔都是经历
ChatGPT 玩「脱」了,写了份毁灭人类计划书,还遭到了 Stack Overflow 的封杀.........
ChatGPT 玩「脱」了,写了份毁灭人类计划书,还遭到了 Stack Overflow 的封杀.........