
嗨,habrozhiteli! 强化学习是人工智能中最流行和最有前途的领域。 使用Python进行实践学习RL不仅可以帮助您掌握基础知识,还可以帮助您掌握增强的高级深度学习算法。 本书适用于对人工智能感兴趣并希望学习强化学习方法的MO开发人员和深度学习爱好者。 阅读本书,并通过在工作中或工作中实施实际示例,成为强化学习方面的专家。 线性代数,数学分析和Python编程语言的知识将帮助您理解演示的逻辑。
摘录。 使用LSTM RNN生成歌词
现在,让我们看看如何使用LSTM生成Zayn Malik歌词。 Zane的歌曲歌词数据集可以在
https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/07.%20Deep%20Learning%20Fundamentals/data/ZaynLyrics.txt中下载。
工作从导入必要的库开始:
import tensorflow as tf import numpy as np
然后读取带有歌词的文件:
with open("Zayn_Lyrics.txt","r") as f: data=f.read() data=data.replace('\n','') data = data.lower()
确保数据已成功上传:
data[:50] "now i'm on the edge can't find my way it's inside "
现在所有字符都存储在变量all_chars中:
all_chars=list(set(data))
唯一字符数存储在unique_chars中:
unique_chars = len(all_chars)
字符总数存储在变量total_chars中:
total_chars =len(data)
首先,我们为每个字符分配一个索引。 char_to_ix将包含字符到索引的映射,而ix_to_char将包含字符到索引的映射:
char_to_ix = { ch:i for i,ch in enumerate(all_chars) } ix_to_char = { i:ch for i,ch in enumerate(all_chars) }
一个例子:
char_to_ix['e'] 9 ix_to_char[9] e
然后定义了generate_batch函数,该函数生成输入值和目标值。 目标值等于输入值乘以i的偏移量。
例如,如果输入= [12,13,24]的偏移值为1,则目标值为[13,24]:
def generate_batch(seq_length,i): inputs = [char_to_ix[ch] for ch in data[i:i+seq_length]] targets = [char_to_ix[ch] for ch in data[i+1:i+seq_length+1]] inputs=np.array(inputs).reshape(seq_length,1) targets=np.array(targets).reshape(seq_length,1) return inputs,targets
我们将确定序列的长度,学习的速度以及结点的数量,这等于神经元的数量:
seq_length = 25 learning_rate = 0.1 num_nodes = 300
构建LSTM RNN。 TensorFlow提供了用于构建LSTM单元的BasicLSTMCell()函数; 您必须指定LSTM单元中的单位数和使用的激活函数的类型。
因此,我们使用tf.nn.dynamic_rnn()函数创建LSTM单元并使用该单元构建RNN网络,该函数返回输出和状态值:
def build_rnn(x): cell= tf.contrib.rnn.BasicLSTMCell(num_units=num_nodes, activation=tf.nn.relu) outputs, states = tf.nn.dynamic_rnn(cell, x, dtype=tf.float32) return outputs,states
现在创建输入X和目标Y的替代项:
X=tf.placeholder(tf.float32,[None,1]) Y=tf.placeholder(tf.float32,[None,1])
将X和Y转换为int:
X=tf.cast(X,tf.int32) Y=tf.cast(Y,tf.int32)
还为X和Y创建onehot视图:
X_onehot=tf.one_hot(X,unique_chars) Y_onehot=tf.one_hot(Y,unique_chars)
通过调用build_rnn函数从RNN获取输出和状态:
outputs,states=build_rnn(X_onehot)
转置输出:
outputs=tf.transpose(outputs,perm=[1,0,2])
我们初始化权重和偏移量:
W=tf.Variable(tf.random_normal((num_nodes,unique_chars),stddev=0.001)) B=tf.Variable(tf.zeros((1,unique_chars)))
我们通过将输出乘以权重并加上偏移量来计算输出:
Ys=tf.matmul(outputs[0],W)+B
现在我们将执行softmax激活并获得概率:
prediction = tf.nn.softmax(Ys)
cross_entropy的损失将计算如下:
cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels =Y_onehot,logits=Ys))
我们的目标是最大程度地减少损耗,因此我们将对网络执行反向传播并执行梯度下降:
optimiser = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cro ss_entropy)
然后将定义辅助函数预测,该预测将根据RNN模型给出下一个预测符号的索引:
def predict(seed,i): x=np.zeros((1,1)) x[0][0]= seed indices=[] for t in range(i): p=sess.run(prediction,{X:x}) index = np.random.choice(range(unique_chars), p=p.ravel()) x[0][0]=index indices.append(index) return indices
然后,将设置batch_size数据包大小,数据包数量和时代数以及用于生成数据包的移位值:
batch_size=100 total_batch=int(total_chars//batch_size) epochs=1000 shift=0
最后,我们创建一个TensorFlow会话并构建一个模型:
init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for epoch in range(epoch): print("Epoch {}:".format(epoch)) if shift + batch_size+1 >= len(data): shift =0
从结果中可以看到,在最初的时代,输出由随机字符组成,但是据您了解,结果有所改善:
Epoch 0: Iteration 0: wsadrpud,kpswkypeqawnlfyweudkgt,khdi nmgof' u vnvlmbis . snsblp,podwjqehb,e;g- 'fyqjsyeg,byjgyotsrdf;;u,ha;ik'sfc;dvtauofd.,q.;npsw'wjy-quw'quspfqw- . . . Epoch 113: Iteration 0: i wanna see you, yes, and she said yes!
关于作者
Sudharsan Ravichandiran是数据处理和分析专家,人工智能的热心爱好者和视频博客。 他获得了安妮大学计算机科学学士学位,并致力于深度学习和强化学习的实际实施研究,包括自然语言处理和计算机视觉。 以前是自由网页设计师和开发人员,曾参与创建多个屡获殊荣的网站。 他目前参加开源项目,并经常回答有关
Stack Overflow的问题。
关于科学编辑
Sujit Pal是Reed-Elsevier集团最新技术开发团队Elsevier Labs的技术研究总监。 他从事语义搜索,自然语言处理,机器和深度学习领域的研究。 在Elsevier,他参与了多个创新项目,包括评估和改善搜索质量,图像分类和重复识别,注释和开发医学和科学文本选集。 他与Antonio Gulli写了一本深度学习书,并在
Salmon Run博客上写了有关技术的文章。
Suriyadeepan Ramamoorthy是来自Pondicherry(印度)的AI研究人员和工程师,是一名人工智能研究人员和工程师。 他的工作主题是理解自然语言并形成推理。 他在深度学习博客上撰写了大量文章。 在SAAMA Technologies,他使用先进的深度学习方法来分析生物医学文本。 作为自由软件的热心支持者,他积极参与了FSFTN社区的软件开发项目。 他还对协作网络,数据可视化和创意编程感兴趣。
»这本书的更多信息可以
在出版商的网站上找到»
目录»
摘录小贩优惠券25%优惠-Python
支付纸质版本的书后,就会通过电子邮件发送电子书。