第六次周报

第六次周报

  • 摘要
  • LeNet5
    • 结构
  • 代码
  • 文献学习
    • 摘要:
    • 研究方法:
    • 研究成果
  • 总结

摘要

本周对cnn的经典模型LeNet5进行了解,主要工作放在对tensoflow的学习,还阅读了《Drug-Drug Interaction Extraction via Convolutional Neural Networks》,这篇文献设计的系统是基于cnn的

LeNet5

结构

LeNet-5中主要有2个卷积层、2个池化层、3个全连接层3种连接方式
第六次周报_第1张图片
卷积1层:采用6个5x5步长为1的卷积核进行操作,不使用padding,这一层的输出的尺寸为32-5+1=28,深度为6。这个卷积层总共有5x5x1x6+6=156个参数,其中6个为偏置参数。
池化层1 2x2的区域内进行最大池化,步长为2,输出矩阵大小为14x14x6
卷积层2 采用16个5x5步长为1的卷积核,不使用padding,输出矩阵大小为10x10x16。
池化层2 与第一池化层设置一致,输出矩阵大小为5x5x16。
全连接1 有120个神经元(在LeNet-5模型论文中将这一层称为卷积层,但是因为过滤器的大小就是5x5,所以和全连接层没有区别)
全连接2有84个神经元
全连接3有10个神经元,对应分类结果

不足之处 : 网络很小,限制了应用场景,LeNet-5 对于复杂问题的处理结果并不理想。

提供的思路 : 是用卷积提取与位置相关的信息;用池化来减少特征数量;用全连接来提取特征、进行预测。

代码

本周主要学习tensoflow,使用tensoflow构建各种各样的数据流图

数据流图1:创造一个线性模型 优化使其接近样本

import tensorflow as tf
import numpy as np
tf.compat.v1.disable_eager_execution() # 解决tf版本不同导致的报错

# 样本
X_data = np.random.rand(100) #生成100个随机点
Y_data = X_data*0.1+0.2

#构建线性模型
w = tf.Variable(0.)
b = tf.Variable(0.)
y = w*X_data+b

#定义损失函数
loss = tf.reduce_mean(tf.square(Y_data-y))
#定义优化器
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.2) # 学习率0.2
#训练函数
train = optimizer.minimize(loss)

init = tf.compat.v1.global_variables_initializer() #初始化w,b

with tf.compat.v1.Session() as sess:
    sess.run(init)
    for i in range(100):   # 学习次数 100
        sess.run(train)
     #   print(sess.run([w,b])) # 打印 w,b的变化

数据流图2:实现数字识别

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
tf.compat.v1.disable_eager_execution() # 解决tf版本不同导致的报错

#定义样本
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis] # -0.5到0.5之间生成200个随机数
# x_data = x_data.reshape(200,1) 与[:,np.newaxis]功能一致
noise = np.random.normal(0,0.02,x_data.shape)# 生成噪声点 形状与x_data一致
y_data = np.square(x_data) + noise

#定义两个占位符
x = tf.compat.v1.placeholder(tf.float32,[None,1])# 格式 形状
y = tf.compat.v1.placeholder(tf.float32,[None,1])# 格式 形状

#一个输入 10个神经元 一个输出
#隐层
L1_w = tf.Variable(tf.random.normal([1,10]))
L1_b = tf.Variable(tf.zeros([1,10]))
L1_onput = tf.matmul(x,L1_w)+L1_b
L1 = tf.nn.tanh(L1_onput) # 得到的数据过激活函数

#输出层
L2_w = tf.Variable(tf.random.normal([10,1]))
L2_b = tf.Variable(tf.zeros([1,1]))
L2_onput = tf.matmul(L1,L2_w)+L2_b
prediction = tf.nn.tanh(L2_onput) # 预测值


#代价函数和训练的方法
loss = tf.reduce_mean(tf.square(y-prediction)) # (真实值-预测值)的平方求平均值
train = tf.compat.v1.train.GradientDescentOptimizer(0.2).minimize(loss)

# 定义会话
with tf.compat.v1.Session() as sess:
    sess.run(tf.compat.v1.global_variables_initializer())# 初始化第二种方式
    for i in range(2000):
        sess.run(train,feed_dict={x:x_data,y:y_data})
    
    #画图
    prediction_val = sess.run(prediction,feed_dict={x:x_data})
    plt.figure()
    plt.scatter(x_data,y_data) # 样本显示为散点图
    plt.plot(x_data,prediction_val,'r-',lw=5) # 红色直线图 线宽为5
    plt.show()

文献学习

《Drug-Drug Interaction Extraction via Convolutional Neural Networks》
作者:Shengyu Liu, Buzhou Tang, Qingcai Chen, and Xiaolong Wang

摘要:

作者提出了一种基于cnn的DDI(药物相互作用)提取方法。使用Word嵌入和位置嵌入来分别捕获单词的语义信息和单词与两种药物之间的关系,用来表示DDI(药物相互作用)实例。作者基于cnn的方法中,不仅考虑单词嵌入,还考虑位置嵌入使得操作不依赖于任何现有的NLP工具包。

研究方法:

DDI提取被认为是同一个句子中所有可能相互作用的药物对的多类分类问题。每对药物被分为一种预定义的ddi或分类为不相互作用的药物。给定一个带有药物的句子,总共需要对,2个=(−1)/2个候选DDI进行分类。
下图内容为作者基于cnn的DDI提取方法的总体工作流程
第六次周报_第2张图片
在预处理模块首先标记句子,规范化标记,并从DDI候选对象中过滤出非相互作用的对,然后使用CNN模块进行DDI提取。在训练阶段,在训练集中标注的DDI候选样本是具有不同类型的正样本,而其他候选样本则是负样本。训练的任务是在这些样本上获得一个CNN模型。在测试阶段,所有候选DDI被分为不同类型的DDI或非DDI。

研究成果

作者提出基于cnn的DDI提取方法系统优于所有现有系统,因为其中大多数系统是基于SVM,具有各种特征,如句法特征和来自外部词汇资源的特征。本文提出的系统与最先进的基于SVM的系统相比,优点在于它不使用由现有的NLP工具包就能生成的任何手动定义的特性。在本系统中使用的特征(即在训练过程中自动学习的单词嵌入和位置嵌入)能包含除了手动定义的特征之外的其他有用信息。此外,它们还有效地避免了由于现有的NLP工具包所造成的错误。

总结

本周学的有点慢,主要打代码了,下周会集中学习经典模型的论文以及代码实现。

你可能感兴趣的:(深度学习,tensorflow,cnn)