chatbot1_2 RNN简单实现

chatbot1.2

如何处理多义词的embedding?

  • 每个意思一个向量,多方叠加。在某个切面与其相同意思的向量相近

如何识别和学习词组的向量?

  • 多次出现在一起,认为是词组

如何处理未曾见过的新词?

  • 语境平均,语境猜测

通过非监督学习训练词向量需要多少数据?

  • Glove
  • Word2vec

如何用已有的数据优化?

Retrofit

  • 灰色的是非监督学习学到的向量,白色的是知识库的词和其关系。白色标记学到的尽量接近灰色的来加强知识库里的词的关系或消弱。–》兼顾两者特征的新的。形成下面的
  • Conceptnet embedding

RNN

https://r2rt.com/recurrent-neural-networks-in-tensorflow-i.html
在这里插入图片描述

demo1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

# adapted from https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/rnn/ptb/reader.py
def gen_batch(raw_data, batch_size, num_steps):# """#     产生minibatch数据#     :param raw_data:所有的数据,(input,output)tuple#     :param batch_size: 一个minibatch包含的样本数量,每个样本是一个sequence,有多少个序列#     :param num_steps: 每个sequence样本的长度#     :return:#         一个generator,在一个tuple里面包含一个minibatch的输入,输出序列#     """raw_x, raw_y = raw_datadata_length = len(raw_x)# 将raw_data分为batches并且stack他们垂直的在数据矩阵中# partition raw data into batches and stack them vertically in a data matrixbatch_partition_length = data_length // batch_sizedata_x = np.zeros([batch_size, batch_partition_length], dtype=np.int32)data_y = np.zeros([batch_size, batch_partition_length], dtype=np.int32)#这两个形状相同for i in range(batch_size):data_x[i] = raw_x[batch_partition_length * i:batch_partition_length * (i + 1)]data_y[i] = raw_y[batch_partition_length * i:batch_partition_length * (i + 1)]# further divide batch partitions into num_steps for truncated backprop更进一步分割epoch_size = batch_partition_length // num_stepsfor i in range(epoch_size):x = data_x[:, i * num_steps:(i + 1) * num_steps]y = data_y[:, i * num_steps:(i + 1) * num_steps]yield (x, y)def gen_epochs(n, num_steps):for i in range(n):yield gen_batch(gen_data(), batch_size, num_steps)

caculate the perplexity

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3中完美的模型表示,既考虑t-3的时间也考虑了t-8的时间
  • 4中不完美的模型不考虑时间

简易的RNN模型实现

在这里插入图片描述

  • 前一个会把它自己的状态作为输入放到后一个里面,他也会把自己的观测时作为另一部分放在rnn里面,两个输入会拼接到一起映射到一个四维的向量里,然后这个四维的向量会进一步映射到一个一维的输出里面。这就是如何使用一个rnn模型给定一个输入,预测一个输出。
  1. 默认graph,variale_scope,name_scope
  2. 自定义rnn cell
    ####tensorflow tip:tf.placeholder ####
  3. 在计算图中添加node,用于存储数据
  4. placeholder没有默认数据,数据完全由外部提供。注意tf.Variable,tf.Tensor,tf.placeholder的区别
  • 外界输入数据:tf.placeholder
  • 中间数据:tf.Tensor,tensorflow operation的output
  • 参数:tf.Variable
"""
Placeholders
"""x = tf.placeholder(tf.int32, [batch_size, num_steps], name='input_placeholder')
y = tf.placeholder(tf.int32, [batch_size, num_steps], name='labels_placeholder')
init_state = tf.zeros([batch_size, state_size])#得到的是当前的状态,也是下一个的其中一个输入"""
RNN Inputs
"""
# RNN Inputs
# Turn our placeholder into a list of one-hot tensors:
# rnn_inputs is a list of num_steps tensors with shape [batch_size, num_classes]
# 将前面定义的placeholder输入到rnn cells
# 将输入序列的每一个0,1数字转化为二维one-hot向量
x_one_hot = tf.one_hot(x, num_classes)
rnn_inputs = tf.unstack(x_one_hot, axis=1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

"""
Definition of rnn_cellThis is very similar to the __call__ method on Tensorflow's BasicRNNCell. See:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py#L95
"""
# state_size#隐含状态的维度,希望把num_classes + state_size映射到新的rnn向量的维度上state_size
#这里只是定义变量
with tf.variable_scope('rnn_cell'):W = tf.get_variable('W', [num_classes + state_size, state_size])b = tf.get_variable('b', [state_size], initializer=tf.constant_initializer(0.0))
#这里使用定义的变量形成一个又一个的rnn单元,且公用同样的参数
def rnn_cell(rnn_input, state):with tf.variable_scope('rnn_cell', reuse=True):#reuse=True如果已存在,就直接拿来用,不再重新建立了W = tf.get_variable('W', [num_classes + state_size, state_size])b = tf.get_variable('b', [state_size], initializer=tf.constant_initializer(0.0))return tf.tanh(tf.matmul(tf.concat([rnn_input, state], 1), W) + b)

init_state,state,final_state

"""
Adding rnn_cells to graphThis is a simplified version of the "static_rnn" function from Tensorflow's api. See:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/rnn/python/ops/core_rnn.py#L41
Note: In practice, using "dynamic_rnn" is a better choice that the "static_rnn":
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/rnn.py#L390
"""
state = init_state#初始化的状态,对第一个rnn单元,我们也要给他一个初始状态,一般是0
rnn_outputs = []
for rnn_input in rnn_inputs:state = rnn_cell(rnn_input, state)rnn_outputs.append(state)
final_state = rnn_outputs[-1]
"""
Predictions, loss, training stepLosses is similar to the "sequence_loss"
function from Tensorflow's API, except that here we are using a list of 2D tensors, instead of a 3D tensor. See:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/seq2seq/python/ops/loss.py#L30
"""#logits and predictions
with tf.variable_scope('softmax'):W = tf.get_variable('W', [state_size, num_classes])b = tf.get_variable('b', [num_classes], initializer=tf.constant_initializer(0.0))
logits = [tf.matmul(rnn_output, W) + b for rnn_output in rnn_outputs]
predictions = [tf.nn.softmax(logit) for logit in logits]# Turn our y placeholder into a list of labels
y_as_list = tf.unstack(y, num=num_steps, axis=1)#losses and train_step
# """
# 计算损失函数,定义优化器
# 从每一个time frame 的hidden state
# 映射到每个time frame的最终output(prediction)
# 和cbow或者skip_gram的最上层相同
# Predictions, loss, training step
# Losses is similar to the "sequence_loss"
# function from Tensorflow's API, except that here we are using a list of 2D tensors, instead of a 3D tensor. See:
# https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/seq2seq/python/ops/loss.py#L30
# """
# logits and predictions
losses = [tf.nn.sparse_softmax_cross_entropy_with_logits(labels=label, logits=logit) for \logit, label in zip(logits, y_as_list)]
total_loss = tf.reduce_mean(losses)
train_step = tf.train.AdagradOptimizer(learning_rate).minimize(total_loss)

tf.variable_scope(‘softmax’)和tf.variable_scope(‘rnn_cell’, reuse=True)中,各有两个W,b的tf.Variable,因为在不同的variable_scope,即便用相同的名字,也是不同的对象。

##打印所有的variable
all_vars =[node.name for node in tf.global_variables()]
for var in all_vars:print(var)	# rnn_cell/W:0
# rnn_cell/b:0
# softmax/W:0
# softmax/b:0
# rnn_cell/W/Adagrad:0计算和优化的东西
# rnn_cell/b/Adagrad:0
# softmax/W/Adagrad:0
# softmax/b/Adagrad:0all_node_names=[node for node in tf.get_default_graph().as_graph_def().node]
#或者tf.get_default_graph().get_operations()
all_node_values=[node.values() for node in tf.get_default_graph().getoperationa()]
for i in range(0,len(all_node_values),50):print("output and operation %d:"%i)print(all_node_values[i])print('---------------------------')print(all_node_names[i])print('\n')print('\n')for i in range(len(all_node_values)):print('%d:%s'%(i,all_node_values[i]))

tensor命名规则

add_7:0第七次调用add操作,返回0个向量7

"""
Train the network
"""def train_network(num_epochs, num_steps, state_size=4, verbose=True):with tf.Session() as sess:sess.run(tf.global_variables_initializer())training_losses = []for idx, epoch in enumerate(gen_epochs(num_epochs, num_steps)):training_loss = 0training_state = np.zeros((batch_size, state_size))if verbose:print("\nEPOCH", idx)for step, (X, Y) in enumerate(epoch):tr_losses, training_loss_, training_state, _ = \sess.run([losses,total_loss,final_state,train_step],feed_dict={x:X, y:Y, init_state:training_state})training_loss += training_loss_if step % 100 == 0 and step > 0:if verbose:print("Average loss at step", step,"for last 250 steps:", training_loss/100)training_losses.append(training_loss/100)training_loss = 0return training_losses
training_losses = train_network(1,num_steps)
plt.plot(training_losses)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepMind创始人Demis Hassabis:AI 的强大,超乎我们的想象

来源:微信公众号“雷锋网”撰文:黄楠、王玥编辑:陈彩娴有人认为 AI 已经穷途末路,但一些绝顶聪明的人还在继续求索。近日,DeepMind 的创始人 Demis Hassabis 作客 Lex Fridman 的播客节目,谈了许多有趣的观…

组网雷达融合处理组件化设计与仿真

人工智能技术与咨询 点击蓝色 关注我们 关键词: 组网雷达 ; 点迹融合 ; 航迹融合 ; 组件化设计 ; 仿真 摘要 数据融合处理是多雷达组网的核心。以典型防空雷达网为参考对象,采用组件化设计方式,将组网数据融合处理过程划分为不同的组件&…

chatbot2 RNN语言模型

基于RNN的语言模型 RNN语言模型理论基础 参考文献 cbow/skip gram 的局限性#### 解决方案 rnn模型细节 数学表示 一个输入一个输出的不是循环神经网络。 RNN语言模型实践 demo1 1A. 优化上一节课的RNN模型 在第一个版本里面,我们将上一节课的代码包装为Class&…

脑机接口:人工智能下一站?

来源:《光明日报》 作者:杨义先、钮心忻,北京邮电大学教授 随着人工智能的发展,脑机接口也逐渐从科幻走进现实。有人希望以此造就“超人”,更多的人则希望能够解决实际问题——让盲人复明、让瘫痪在床的患者重新走路…

仅活了 5 年!谷歌官宣停掉 IoT Core 服务:“现有连接将被关闭”

来源:AI前线整理:冬梅谷歌云 IoT Core 服务推出 5 年后“退役”近日,据外媒报道,谷歌宣布自 2023 年 8 月起,将关闭其物联网(IoT Core)服务,此次官宣 IoT Core 的退役,也…

tensorflow1、2会话、变量、feed、fetch、最小二乘法

第一节课 tensorboard–可以查看训练效果 安装ananconda(略) tensorflow简介 tensorflow结构 是个数据流动的趋势, graph1:默认图 graph2:W*xb->ReLU 2-1 基本计算-会话的使用 import tensorflow as tf # 创建一个常量op,1*…

《Nature》十年努力,“合成”胚胎与大脑和跳动的心脏

来源:生物通研究人员已经用小鼠干细胞创造出了模型胚胎,这些干细胞形成了大脑、跳动的心脏和身体所有其他器官的基础——这是重建生命第一阶段的新途径。小鼠胚胎的小脑由Magdalena Zernicka-Goetz教授领导的研究小组在没有卵子或精子的情况下开发了胚胎…

tensorflow3 非线性回归、mnist、简单神经网络

mnist数据集 手写数字的数据集。60000行训练数据集,10000行测试数据集下载地址:http://yann.lecun.com/exdb/mnist/index.html mnist数据集是形状为[60000,784]的张量,60000张图片,每个图片有784个像素点,这些个像素点…

【院士思维】张钹:我们正处在AI算法不可控的危险状态

来源:清华大学人工智能国际治理研究院8月19日,2022世界机器人大会主论坛正式开幕,期间,有三位院士到场,就“未来机器人:目标、路径和挑战”的主题进行了一场深刻的谈话。三位院士分别为中国科学院院士&…

tensorflow4 代价函数、dropout、优化器

这次扔使用上次的mnist数据集分类的简单版本程序,使用不同的代价函数做计算 二次代价函数 激活函数 使用二次代价函数的运行结果 # 使用二次代价函数的结果-精度 # losstf.reduce_mean(tf.square(y-prediction)) # 0.8322 # 0.8698 # 0.8818 # 0.8882 # 0.8935 #…

强化学习先驱Richard Sutton:将开发新型计算智能体

来源:机器之心编辑:陈萍、小舟DeepMind 和阿尔伯塔大学联合成立的人工智能实验室未来几年要研究什么?2017 年,DeepMind 在加拿大的 Edmonton 成立了其首个英国之外的人工智能研究实验室,并和阿尔伯塔大学大学紧密合作&…

不隐身的“隐身战斗机”

7月19日,韩国KF-21战斗机原型机完成首飞,韩国国防部将该机定位为4代半战斗机。凭借该机,韩国将成为第9个能够研制超音速战斗机的国家。 所谓4代半战斗机,即部分采用隐身技术,同时无法完全达到5代机性能标准的战斗机。…

国科大高级人工智能笔记1-搜索

1.搜索问题 搜索问题——对原问题的建模 构成: 状态空间 包含环境中每一个细节搜索状态:只保留行动需要的细节 后继函数 行动,消耗 初始状态和目标测试 解: 一个行动序列,将初始状态–>目标状态 表示 状态空间图 搜…

自学成才的人工智能显示出与大脑工作方式的相似之处

来源:ScienceAI编译:白菜叶十年来,许多最令人印象深刻的人工智能系统都是使用大量标记数据进行教学的。例如,可以将图像标记为「虎斑猫」或「虎猫」,以「训练」人工神经网络以正确区分虎斑和虎。该战略既取得了惊人的成…

国科大高级人工智能2-人工神经网络(MLP、Hopfield)

常见组合函数 常见激活函数 结构 前馈神经网络(单向)反馈/循环神经网络 学习方法 学习模型 增量迭代 类型 监督无监督 学习策略 Hebbrian Learning 若两端的神经元同时激活,增强联接权重Unsupervised Learning循环?ωij(t1)ω…

Nature:AI的瓶颈突破在于「实体人工智能(PAI)」

来源:公众号机器之能作者:AslanMiriyev 、 Mirko Kovač翻译:Panda近些年人工智能领域已经取得了突飞猛进的进步,但这些进步大都集中于数字人工智能领域,对于能和我们这种生物体一样执行日常任务的实体人工智能&#x…

国科大高级人工智能3-DNN(BM/RBM/DBN/DBM)

1.深层、浅层、BP 出现背景优点缺点浅层神经网络为了解决非线性问题可以拟合任何函数参数多,神经元多,需要更多的计算资源和数据BP算法(对p(labelinput)建模为了计算神经网络损失回传深度神经网络(>5)(时代背景数据…

世界元宇宙大会—李伯虎院士主旨报告:工业元宇宙模式、技术与应用初探

来源:北京物联网智能技术应用协会未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)大脑研究计划,构建互联网(城市)…

国科大高级人工智能+prml4-CNN

文章目录CNN卷积paddingpoolingBP其他CNNResNets残差网络——图像数据应用CNN Hebb学习律(无监督 如果两个神经元在同一时刻被激发,则他们之间的联系应该被强化对神经元的重复刺激,使得神经元之间的突触强度增加 Delta学习律(有监…

​Science:灵长类前额叶皮质进化图谱

来源:brainnews相比其它物种,包括亲缘关系非常近的灵长类,我们人类进化出了高级的认知和复杂的社会行为。毋庸置疑,人类大脑是这一切独特变化的中心,而其中的前额叶皮质又格外的引人注目。灵长类的前额叶皮质跟其他物种…