运用tensorflow写的第一个神经网络
因为实训课要用LSTM+attention机制在钢材领域做一个关系抽取。作为仅仅只学过一点深度学习网络的小白在b站上学习了RNN,LSTM的一些理论知识。
但只懂得一些理论知识是无法完成关系抽取的任务的。于是从图书馆借来《tensoflow实战-----深度学习框架》,在此开始记录我的tensorflow神经网络编程!
首先先介绍一下tensorflow的运作机制,对一个具体的计算而言,一般可以分为两个阶段,第一个阶段用来定义计算图中的计算,第二个阶段用来执行计算。
有了这个概念之后,就会发现这一操作能很好的将框架定义部分,和模型训练部分很好的分开,以下是第一次实验的代码:一个简单的分类问题,一个2,3,1(三层,每一层的节点数)的神经网络。
import tensorflow as tf
from numpy.random import RandomState
batch_size = 8
w1 = tf.Variable(tf.random_normal((2, 3), stddev=1, seed=1))//随机初始化权重,第二个参数为为标准差
w2 = tf.Variable(tf.random_normal((3, 1), stddev=1, seed=1))//随机初始化权重 x = tf.placeholder(tf.float32, shape=(None, 2), name="x_input")//placeholder一般用来在训练时存放输入数据,因为如果定义成常量的话,所消耗的空间太大
y_=tf.placeholder(tf.float32, shape=(None, 1), name="y_input")//参数介绍,需要定义类型和维度,None的意思是,不知道有几组训练数
biases1 = tf.Variable(tf.random_normal((1,3),stddev=1))//定义偏置,其实所谓偏置就是截距的概念
biases2 = tf.Variable(tf.random_normal((1,1),stddev=1))
#a = tf.matmul(x, w1)+biases1
//以下是实现前向传播
a = tf.sigmoid(tf.matmul(x, w1)+biases1)//用sigmoid函数充当激活函数,用来去线性化
y = tf.matmul(a, w2)+biases2
y = tf.sigmoid(y)
#损失函数选用交叉熵函数
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y, 1e-10, 1.0))+(1-y)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0)))
#选择优化方法(即更新权重所用的反向传播的方法,这个adam法还不知道啥意思,目前只知道梯度下降)
train_step = tf.train.AdamOptimizer(0, 0.001).minimize(cross_entropy) #生成随机数据集
rdm = RandomState(1)#随机因子为1
dataset_size = 128
X = rdm.rand(dataset_size, 2)
Y = [[int(x1+x2<1)] for (x1, x2) in X]
//生成会话开始训练模型,即前面所提到的执行计算的阶段
with tf.Session() as sess:
//tensorflow中所有张量都要初始化
initall = tf.global_variables_initializer()
sess.run(initall)
#print(sess.run(biases1))
print(sess.run(w1))
print(sess.run(w2))
//训练集中抽取一小个部分叫一个batch,训练过程是一个batch一个batch训练的
steps = 5000
for i in range(steps):
start = (i*batch_size)%dataset_size
end = min(start+batch_size, dataset_size)
sess.run(train_step, feed_dict={x:X[start:end],y_:Y[start:end]})
//每训练1000次查看一下训练结果,即交叉熵函数的值,越小越好
if(i%1000==0):
total_cross=sess.run(cross_entropy, feed_dict={x:X, y_:Y})
print(i," ",total_cross)
//最后查看一下最后更新的权重
print(sess.run(w1))
print(sess.run(w2)) 第一次写博客,也是初学,有问题请大家指出哈。
运用tensorflow写的第一个神经网络的更多相关文章
- 2 TensorFlow入门笔记之建造神经网络并将结果可视化
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- AI - TensorFlow - 第一个神经网络(First Neural Network)
Hello world # coding=utf-8 import tensorflow as tf import os os.environ[' try: tf.contrib.eager.enab ...
- 使用TensorFlow v2.0构建卷积神经网络
使用TensorFlow v2.0构建卷积神经网络. 这个例子使用低级方法来更好地理解构建卷积神经网络和训练过程背后的所有机制. CNN 概述 MNIST 数据集概述 此示例使用手写数字的MNIST数 ...
- 手写数字识别 卷积神经网络 Pytorch框架实现
MNIST 手写数字识别 卷积神经网络 Pytorch框架 谨此纪念刚入门的我在卷积神经网络上面的摸爬滚打 说明 下面代码是使用pytorch来实现的LeNet,可以正常运行测试,自己添加了一些注释, ...
- 万事开头难,用HTML写的第一个界面,收获颇多
很开心跟了叶老师学习和做项目,基础不好,前期他会帮你安排好学习路线和计划.前期没有项目做,叶老师先让我先学习jQuery,给我推荐了一些网站,叫我一边学习,一边写博客.其实很早就有想写博客的想 ...
- TensorFlow 深度学习笔记 卷积神经网络
Convolutional Networks 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Is ...
- TensorFlow实现与优化深度神经网络
TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林Github工程地址:https://github.com/ahangchen/GDLnotes欢迎star,有问题可以到Issue ...
- Python初学者随笔(一)_ 用Python写的第一个游戏“猜数字”
如标题所写,这篇随笔主要记录下学习Python过程中用Python写的第一个游戏--"猜数字"_跟着"小甲鱼"学Python,链接: https://b23.t ...
- 基于tensorflow实现mnist手写识别 (多层神经网络)
标题党其实也不多,一个输入层,三个隐藏层,一个输出层 老样子先上代码 导入mnist的路径很长,现在还记不住 import tensorflow as tf import tensorflow.exa ...
随机推荐
- 分布式CAP与BASE理论
参考: CAP和BASE理论 https://juejin.im/post/5d720e86f265da03cc08de74 https://github.com/changmingxie/tcc-t ...
- SpringMVC通过Redis实现缓存主页
这里说的缓存只是为了提供一些动态的界面没办法作静态化的界面来减少数据库的访问压力,如果能够做静态化的话的还是采用nginx来做界面的静态化,这样可以承受高并发的访问能力. 好了,废话少说直接看实现代码 ...
- 开启Hyper-V
开启Hyper-V 添加方法非常简单,把以下内容保存为.cmd文件,然后以管理员身份打开这个文件.提示重启时保存好文件重启吧,重启完成就能使用功能完整的Hyper-V了. pushd "%~ ...
- SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符?
SAP QM 检验批里某检验特性的取样数量跟检验计划设置不符? 如下检验批号 890000045939, 结果录入界面,第二个特性里,取样数量是50个.实际上,该检验批对应的检验计划里, 采样过程L- ...
- Symfonos:3 Vulnhub Walkthrough
主机扫描: ╰─ nmap -p1-65535 -sV -A -sT 10.10.202.130 Starting Nmap 7.70 ( https://nmap.org ) at 2019-08- ...
- 我应该怎么学习SAP?
越来越多的人关注本公众号,在后台留言问我怎么进入SAP行业,应该怎么学习SAP,大部分都是外行想入行SAP的朋友.作为过来人,这些问题我也曾经问过别人,也走过不少弯路.但现在轮到别人问我了,为了让初学 ...
- Android 非法字符:'/ufeff'
[问题来源] 不知道大家有没有做过这样的事,在Android开发的过程中,通过文本直接修改代码,不打开编译器,然后提交让同时编译运行.这时Android编译就会报错,指定修改的文件开始位置,显示非法字 ...
- vue.set( target, key, value ) this.$set(对象获数组,要更改的具体数据,重新赋值)用法
调用方法:Vue.set( target, key, value ) target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据 value :重新赋的值 具体用法js代码: //设 ...
- Java之IO初识(字节流和字符流)
IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...
- Java之ssh框架spring配置文件配置定时任务
最近做了一个数据同步功能,要求晚上0点去定时同步数据,这是个老项目框架用的ssh,定时任务基于quartz,废话不多说,下面详细说说相关配置. 在spring的配置文件中: <!-- 0点定时任 ...