tensorflow(4):神经网络框架总结
#总结神经网络框架 #1,搭建网络设计结构(前向传播) 文件forward.py
def forward(x,regularizer): # 输入x 和正则化权重
w=
b=
y=
return y def get_weight(shape,regularizer): #w的shape 和w的权重
w=tf.Variable(tf.random_normal(shape),dtype=tf.float32) # 给w赋初值
#给 每一个w的正则化损失加到总损失中
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
return w def get_bias(shape): #某一层b的个数
b=tf.Variable(tf.constant(0.01,shape=shape)) #赋初值
return b #反向传播就是训练模型,优化参数 文件backward.py
def backward():
x=tf.placeholder(tf.float32,shape=(None,2)) #给输入占位
y_=tf.placeholder(tf.float32,shape=(None,1))
y=forward.forward(x,refularizer)
global_step=tf.Variable(0,trianable=False) #轮数计数器
loss= #定义loss # loss 可以是 自定义或者交叉熵
# y与y_的差距{loss_mse}=tf.reduce_mean(tf.square(y-y_))
# 也可以是:
# ce=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
# y与y_的差距{cem}=tf.reduce_mean(ce)
# 加入正则化之后,需要
# loss=y与y_的差距+tf.add_n(tf.get_collection('losses')) train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step) # 如果使用ema 增加以下,动态计算学习率
learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,
global_step, LEARNING_RATE_STEP(即数据库样本总数/batch_size),
LEARNING_RATE_DECAY,
staircase=True) ema=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
ema_op=ema.apply(tf.trainable_variables())
with tf.control_dependencies([train_step,ema_op]):
train_op=tf.no_op(name='train') with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op) for i in range(steps):
sess.run(train_step,feed_dict={x: ,y_= })
if i % 轮数 ==0:
print('') if '__name__'=='__main__': #判断是否运行的是主文件
backward()
使用正则化提高泛化性, 使用指数衰减学习率加快优化效率
使用三个模块
1 生成数据集 generateds.py
2 前向传播 forward.py
3 反向传播 backward.py
# 生成数据集 generateds.py
import numpy as np
import matploblib.pyplot as plt
seed=2
def genetateds():
rdm=np.random.RandomState(seed)
X=rdm.randn(300,2)
Y_=[int(x0*x0+x1*x1<2) for (x0,x1) in X]
Y_c=[['red' if y else 'blue'] for y in Y_] #1则红色,0则蓝色
X=np.vstack(X).reshape(-1,2) #整理为n行2列,按行的顺序来
Y_=np.vstack(Y_).reshape(-1,1)# 整理为n行1列
return X,Y_,Y_c
# 前向传播
import tensorflow as tf def get_weight(shape,regularizer): #w的shape 和w的权重
w=tf.Variable(tf.random_normal(shape),dtype=tf.float32)
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
return w def get_bias(shape): #b的长度
b=tf.Variable(tf.constant(0.01,shape=shape))
return b def forward(x,regularizer): # 输入x 和正则化权重
w1=get_weight([2,11],regularizer)
b1=get_bias([11])
y1=tf.nn.relu(tf.matmul(x,w1)+b1) #relu 激活函数 w2=get_weight([11,1],regularizer)
b2=get_bias([1])
y=tf.matmul(y1,w2)+b2 #输出层不过激活函数
return y
# 反向传播
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import genarateds
import forward
steps=40000
batch_size=30
LEARNING_RATE_BASE=0.001
LEARNING_RATE_DECAY=0.999
regularizer=0.01 def backward():
x=tf.placeholder(tf.float32,shape=(None,2)) #给输入占位
y_=tf.placeholder(tf.float32,shape=(None,1)) X,Y_,Y_c=genarateds.generateds()
y=forward.forward(x,refularizer) global_step=tf.Variable(0,trianable=False) #轮数计数器
learning_rate=tf.train.exponential_decay(LEARNING_RATE_BASE,
global_step, 300/batch_size,
LEARNING_RATE_DECAY,
staircase=True)
#定义损失函数
loss_mse=tf.reduce_mean(tf.square(y-y_))
loss_total=loss_mse+tf.add_n(tf.get_collection('losses'))
#定义反向传播方法 包含正则化
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss_total)
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
for i in range(steps):
start=(i*batch_size)%300
end=start+batch_size
sess.run(train_step,feed_dict={x:X[start:end],y_:Y_[start:end]})
if i%10000==0:
loss_v=sess.run(loss_total,feed_dict={x:X,y_:Y_})
print('after %d steps,loss is:%f'%(i,loss_v)) xx,yy=np.mgrid[-3:3:0.01,-3:3:0.01]
grid=np.c_[xx.ravel(),yy.ravel()]
probs=sess.run(y,feed_dict={x:grid})
probs=probs.reshape(xx.shape) #调整成xx的样子 plt.scatter(X[:,0],X[:,1],c=np.squeeze(Y_c))
plt.contour(xx,yy,probs,levels=[.5]) #给probs=0.5的值上色 (显示分界线)
plt.show() if '__name__'=='__main__': #判断是否运行的是主文件
backward()
最后运行 backward.py 即可!!
tensorflow(4):神经网络框架总结的更多相关文章
- 用TensorFlow搭建一个万能的神经网络框架(持续更新)
我一直觉得TensorFlow的深度神经网络代码非常困难且繁琐,对TensorFlow搭建模型也十分困惑,所以我近期阅读了大量的神经网络代码,终于找到了搭建神经网络的规律,各位要是觉得我的文章对你有帮 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码)
1.tf.nn.lrn(pool_h1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) # 局部响应归一化,使用相同位置的前后的filter进行响应归一化操作 参数 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-神经网络mnist分类
使用tensorflow构造神经网络用来进行mnist数据集的分类 相比与上一节讲到的逻辑回归,神经网络比逻辑回归多了隐藏层,同时在每一个线性变化后添加了relu作为激活函数, 神经网络使用的损失值为 ...
- (转)一文学会用 Tensorflow 搭建神经网络
一文学会用 Tensorflow 搭建神经网络 本文转自:http://www.jianshu.com/p/e112012a4b2d 字数2259 阅读3168 评论8 喜欢11 cs224d-Day ...
- TensorFire:WEB端的高性能神经网络框架
TensorFire:WEB端的高性能神经网络框架 摘要: 近日,一种专门用于在网页内执行神经网络算法的JavaScript库——TensorFire引起了人们的关注,这种JavaScript库在浏览 ...
- 一文学会用 Tensorflow 搭建神经网络
http://www.jianshu.com/p/e112012a4b2d 本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的,讲的很好,浅显易懂,入门首选, 而且在github有代码 ...
- 【零基础】使用Tensorflow实现神经网络
一.序言 前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务而 ...
- Tensorflow保存神经网络参数有妙招:Saver和Restore
摘要:这篇文章将讲解TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的神经网络. 本文分享自华为云社区<[Python人工智能] 十一. ...
- 用Tensorflow让神经网络自动创造音乐
#————————————————————————本文禁止转载,禁止用于各类讲座及ppt中,违者必究————————————————————————# 前几天看到一个有意思的分享,大意是讲如何用Ten ...
随机推荐
- linux 如何保持兼容性
参考链接: https://www.cnblogs.com/MYSQLZOUQI/p/5383594.html
- 🍓 redux示例 🍓
- Centos7 nginx报错403 forbidden
参考链接:http://www.cnblogs.com/chinway/archive/2017/08/14/7356239.html 因为安全性的考虑这个也是默认会出现的错误,因为SELinux的存 ...
- Java对象的浅拷贝和深拷贝&&String类型的赋值
Java中的数据类型分为基本数据类型和引用数据类型.对于这两种数据类型,在进行赋值操作.方法传参或返回值时,会有值传递和引用(地址)传递的差别. 浅拷贝(Shallow Copy): ①对于数据类型是 ...
- centos设置服务开机启动失败问题
1.安装某服务设置开机启动的时候报错 [root@node1 ~]# systemctl enable lvm2-lvmetad.serviceThe unit files have no [Inst ...
- Latex自定义文档纸张大小
\usepackage{geometry} \special{papersize=8.5in,11in}%纸张大小为8.5inch×11inch
- Houdini OpenCL
SOP: simple moveKernel #include "interpolate.h" float lerpConstant( constant float * in, i ...
- 使用jsencrypt(rsa加密方式)给js加密防被刷
加密步骤 1.需要加密的参数 * * ).toISOString().replace(/T/g, }Z/, ''); //使用本地时间,然后转换格式 2.js中引用jsencrypt.js文件,然后实 ...
- Linux中设置别名
作者:邓聪聪 查看别名: alias设置别名: 临时设置: alias show='ls -al' 永久生效: 修改 家目录/.bashrc [root@localhost ~]# cat .bash ...
- thinkphp提示不支持mysqli或者mysql
确认php是否安装了php-mysql组件,nginx或apache的php服务进程