一、搭建简单的CNN做序列标注代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt TIME_STEPS = 15# backpropagation through time 的time_steps
BATCH_SIZE = 1#50
INPUT_SIZE = 1 # x数据输入size
LR = 0.05 # learning rate
num_tags = 2
# 定义一个生成数据的 get_batch function:
def get_batch():
xs = np.array([[[[2], [3], [4], [5], [5], [5], [1], [5], [3], [2], [5], [5], [5], [3], [5]]]])
res = np.array([[0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]])
ys = np.zeros([1,TIME_STEPS,2])
for i in range(TIME_STEPS):
if(res[0,i] == 0):
ys[0,i,0] = 1
ys[0,i,1] = 0
else:
ys[0,i,0] = 0
ys[0,i,1] = 1 return [xs, res,ys] # 定义 CNN 的主体结构
class CNN(object):
def __init__(self, n_steps, input_size, num_tags, batch_size):
self.n_steps = n_steps
self.input_size = input_size
self.num_tags = num_tags
self.batch_size = batch_size
#卷积神将网络的输入:[batch, in_height, in_width, in_channels],在自然语言处理中height为1
self.xs = tf.placeholder(tf.float32, [self.batch_size,1, self.n_steps, self.input_size], name='xs')
#做序列标注,第二维对应好输入的n_steps,相当于每个时刻的输入都有一个输出
self.ys = tf.placeholder(tf.int32, [self.batch_size, self.n_steps,self.num_tags], name='ys')# self.featureNum = 10#提取10个特征 #[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数]
W_conv1 = self.weight_variable([1,3,1,self.featureNum])#提取10个特征
#对应10个卷积核输出
b_conv1 = self.bias_varibale([self.featureNum]) #卷积操作
layer_conv1 = tf.nn.conv2d(self.xs, W_conv1,strides=[1, 1, 1, 1],padding="SAME",) + b_conv1
#激励层
layer_conv1 = tf.nn.relu(layer_conv1)
#最大值池化 本处去除池化层为了后续计算简便
#layer_pool1 = tf.nn.max_pool(layer_conv1,
# [1, 1, 3, 1],[1,1,1,1],padding='VALID')
layer_pool1 = layer_conv1 # 全连接层 映射到self.n_steps x self.num_tags
layer_pool1 = tf.reshape(layer_pool1,[self.n_steps,self.featureNum])
W_fc1 = self.weight_variable([self.featureNum,self.num_tags])
b_fc1 = self.bias_varibale([self.num_tags])
h_fc1 = tf.matmul(layer_pool1, W_fc1) + b_fc1
#激励层
h_fc1 = tf.nn.relu(h_fc1)
#softmax 归一化
self.y_conv = tf.nn.softmax(h_fc1)
self.label = tf.reshape(self.ys,[self.n_steps,2])
self.cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=self.label, logits=self.y_conv))
#梯度下降
self.train_op = tf.train.AdamOptimizer(LR).minimize(self.cost)
self.pred = tf.argmax(self.y_conv,axis = 1) def weight_variable(self,shape):
initial=tf.truncated_normal(shape, mean=0.0, stddev=0.1)
return tf.Variable(initial)
def bias_varibale(self,shape):
initial=tf.constant(0,1,shape=shape)
return tf.Variable(initial) # 训练CNN
if __name__ == '__main__': # 搭建 CNN 模型
model = CNN(TIME_STEPS, INPUT_SIZE, num_tags, BATCH_SIZE)
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # matplotlib可视化
plt.ion() # 设置连续 plot
plt.show()
# 训练多次
for i in range(150):
xs, res,ys = get_batch() # 提取 batch data
# 初始化 data
feed_dict = {
model.xs: xs,
model.ys: ys,
}
# 训练
_, cost,pred = sess.run(
[model.train_op, model.cost, model.pred],
feed_dict=feed_dict) # plotting x = xs.reshape(-1,1)
r = res.reshape(-1, 1)
p = pred.reshape(-1, 1) x = range(len(x)) plt.clf()
plt.plot(x, r, 'r', x, p, 'b--')
plt.ylim((-1.2, 1.2))
plt.draw()
plt.pause(0.3) # 每 0.3 s 刷新一次 # 打印 cost 结果
if i % 20 == 0:
print('cost: ', round(cost, 4))

  得到结果:

二、CNN主要知识点

  待整理。

CNN做序列标注问题(tensorflow)的更多相关文章

  1. DL4NLP —— 序列标注:BiLSTM-CRF模型做基于字的中文命名实体识别

    三个月之前 NLP 课程结课,我们做的是命名实体识别的实验.在MSRA的简体中文NER语料(我是从这里下载的,非官方出品,可能不是SIGHAN 2006 Bakeoff-3评测所使用的原版语料)上训练 ...

  2. 用CRF++开源工具做文本序列标注教程

    本文只介绍如何快速的使用CRF++做序列标注,对其中的原理和训练测试参数不做介绍. 官网地址:CRF++: Yet Another CRF toolkit 主要完成如下功能: 输入 -> &qu ...

  3. 序列标注(HMM/CRF)

    目录 简介 隐马尔可夫模型(HMM) 条件随机场(CRF) 马尔可夫随机场 条件随机场 条件随机场的特征函数 CRF与HMM的对比 维特比算法(Viterbi) 简介 序列标注(Sequence Ta ...

  4. BiLSTM:序列标注任务的标杆

    Bidirectional LSTM-CRF Models for Sequence Tagging. Zhiheng Huang. 2015 在2015年,本文第一个提出使用BiLSTM-CRF来做 ...

  5. TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载

    http://blog.csdn.net/scotfield_msn/article/details/60339415 在TensorFlow (RNN)深度学习下 双向LSTM(BiLSTM)+CR ...

  6. 转:TensorFlow入门(六) 双端 LSTM 实现序列标注(分词)

    http://blog.csdn.net/Jerr__y/article/details/70471066 欢迎转载,但请务必注明原文出处及作者信息. @author: huangyongye @cr ...

  7. TensorFlow教程——Bi-LSTM+CRF进行序列标注(代码浅析)

    https://blog.csdn.net/guolindonggld/article/details/79044574 Bi-LSTM 使用TensorFlow构建Bi-LSTM时经常是下面的代码: ...

  8. 序列标注(BiLSTM-CRF/Lattice LSTM)

    前言 在三大特征提取器中,我们已经接触了LSTM/CNN/Transormer三种特征提取器,这一节我们将介绍如何使用BiLSTM实现序列标注中的命名实体识别任务,以及Lattice-LSTM的模型原 ...

  9. Bi-LSTM+CRF在文本序列标注中的应用

    传统 CRF 中的输入 X 向量一般是 word 的 one-hot 形式,前面提到这种形式的输入损失了很多词语的语义信息.有了词嵌入方法之后,词向量形式的词表征一般效果比 one-hot 表示的特征 ...

随机推荐

  1. SpringMVC与Struts不同(五)

    springmvc与struts2不同 1.springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器. 2.springmvc是基于方法开发(一个url对 ...

  2. VS2017编译boost库

    1.http://www.boost.org/     下载boost库. 2.解压到 D:\ProgramFiles\boost 3.环境配变量配置     VS2017更加注重跨平台性,安装文件较 ...

  3. (并发编程)进程 (multiprocessing--Process实现进程并发)

    ['创建进程2方式种', '进程对象属性:join方法,守护进程obj.daemon=True,obj.pid, obj.name, obj.terminate(),obj.is_alive()等 ' ...

  4. Spring_使用XML文件的方式配置事务

    步骤: 正常配置jdbctemplate 正常配置bean 配置事物管理器 配置事物管理器 配置aop切入点,通过切入点把事物链接起来 思路: 接着上一个买书的例子吧,直接拷到新包下,把注解都干掉,需 ...

  5. OneNET麒麟座应用开发之六:与气体质量流量控制器通讯

    气体质量流量控制器,简称MFC,通常用于在各种检测中,计量气体的流量.在我们的大气环境数据采集站中,要让气流保持稳定,这样才能准确的获取PM25的数据. 我们采用的气体质量流量控制器具备串口通讯功能, ...

  6. vue2之 missing param for named route "xxxx"

    场景: 解决方法:可以做的是将其包含router-link在适当的位置v-if,以便在您的异步数据实际到达之前不会尝试渲染. html代码: <div id="app" cl ...

  7. python----多继承C3算法

    https://blog.csdn.net/fmblzf/article/details/52512145

  8. cf787c 博弈论+记忆化搜索

    好题,单纯的就是pn状态的推导 /* 把第一个点标为0,剩下的点按1-n-1编号 胜态是1,败态为0,dp[i][j]表示第i个人,怪兽起始位置在j时的胜负态 把0点设置为必败态,然后对于一个人来说, ...

  9. Linux下配置自动更新时间

    1,修正本地时区及ntp服务 [root@VM_0_13_centos ~]# yum -y install ntp [root@VM_0_13_centos ~]# rm -rf /etc/loca ...

  10. 步步为营-30-AES加密与解密

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...