2 TensorFlow入门笔记之建造神经网络并将结果可视化
————————————————————————————————————
写在开头:此文参照莫烦python教程(墙裂推荐!!!)
————————————————————————————————————
TensorFlow之建造第一个神经网络
1 定义添加层
import tensorflow as tf
def add_layer(inputs,in_size,out_size,activation_function=None):
Weights = tf.Variable(tf.random_normal([in_size,out_size]))#用随机数来初始化Weights,这比全部为0要好,int_size行,out_size列
biases = tf.Variable(tf.zeros([1,out_size])+0.1) #1行,out_size列,均为0.1
Wx_plus_b = tf.matmul(inputs,Weights) + biases #预测出来但还没激活的值
if activation_function is None: #如果没有激活函数,则返回预测原值
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b) #否则,返回预测值激活之后的值
return outputs
2 建立神经网络结构
import numpy as np
#生成数据
x_data = np.linspace(-1,1,300)[:,np.newaxis] #有300行,即一个特性,300个对象
noise = np.random.normal(0,0.05,x_data.shape) #加入噪音,用期望为0、方差为0.05的正态分布的随机数来建立
y_data = np.square(x_data)-0.5 + noise
#将输入数据和输出数据定义为placeholder
xs = tf.placeholder(tf.float32,[None,1]) #1为属性数,None为随意数都行
ys = tf.placeholder(tf.float32,[None,1])
#第一层layer,即输入层,这里只有一个神经元
#第二层layer,即隐藏层,这里定义10个神经元
#第三层layer,这里为输出层,这里有一个神经元
#下面增加第二层,即这里的隐藏层
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
#下面定义输出层
prediction = add_layer(l1,10,1,activation_function=None)
#计算损失
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys -prediction),reduction_indices=[1]))#求和之后求平均
#训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #学习效率为0.1,学习效率一般小于1
#初始所有变量
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i % 50 == 0:
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #打印误差,如果误差不断减小,则模型有不断学习
0.32276458
0.012201915
0.0066840313
0.0057683536
0.0053448635
0.0050948677
0.004914441
0.004781631
0.0046798103
0.0046042935
0.004543632
0.0044809543
0.0044029644
0.0042897784
0.004155126
0.004016761
0.0038873414
0.003766319
0.0036393174
0.0035409257
由上面结果可知,误差是越来越小的。这说明,这个网络是在不断学习的
3 结果可视化
#在上面的for之前加入一些绘图的代码,如下:
%matplotlib inline
import matplotlib.pyplot as plt #结果可视化所用
#加入绘图代码,先打印x_data和y_data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data)
plt.ion() #使show()后不会暂停程序
#plt.show()
for i in range(1000):
#训练
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i % 50 == 0:
#print(sess.run(loss,feed_dict={xs:x_data,ys:y_data})) #打印误差,如果误差不断减小,则模型有不断学习
try:
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction,feed_dict={xs:x_data}) #计算预测值
lines = ax.plot(x_data,prediction_value,'r-',lw = 5) #绘制预测值的曲线,红色,线框为5
#ax.lines.remove(lines[0]) #抹除掉第一个线段
plt.pause(1) #暂停1秒
这里应该是有一条红色的线在不断拟合这些蓝点的。这里只显示了最后一条红色的线
4 加速神经网络
- SGD:把数据分块,每次使用批量数据。虽然损失了一点精度,但速度大大加快了
- Mmomentum:在更新W权值时加速。公式如下:
m = b1*m - learning rate * dx;
W += m - AdaGrad:在更新W权值时加速。公式如下:
v += pow(dx,2)
W += -Learning rate * dx /sqrt(v) - RMSProp:在更新W权值时加速。公式如下:
v = b1*v + (1-b1)*pow(dx,2)
W += -Learning rate * dx/sqrt(v) - Adam:在更新W权值时加速。公式如下:(又快又好)
m = b1*m +(1-b1)*dx
v = b2*v + (1-b2)*pow(dx,2)
W += -Learning tate *m/sqrt(v)
5 Optimizer优化器
TensorFlow有很多优化器,可以去tensorflow的官网查询
#这里列出几种优化器:
tf.train.GradientDescentOptimizer #初级常用
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.MomentumOptimizer #常用
tf.train.AdamOptimizer #常用
tf.train.FtrlOptimizer
tf.train.RMSPropOptimizer #常用
6 网络可视化工具:tensorboard
利用Tensorboard,可以很好的画出我们的网络结构。下面以上面的例子为例,实践一下。
#把上面的代码copy下来先
import tensorflow as tf
def add_layer(inputs,in_size,out_size,activation_function=None):
with tf.name_scope('layer'): #加入名字
with tf.name_scope('weights'):
Weights = tf.Variable(tf.random_normal([in_size,out_size]))#用随机数来初始化Weights,这比全部为0要好,int_size行,out_size列
with tf.name_scope('biases'):
biases = tf.Variable(tf.zeros([1,out_size])+0.1) #1行,out_size列,均为0.1
with tf.name_scope('Wx_plus_b'):
Wx_plus_b = tf.matmul(inputs,Weights) + biases #预测出来但还没激活的值
if activation_function is None: #如果没有激活函数,则返回预测原值
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b) #否则,返回预测值激活之后的值
return outputs
import numpy as np
x_data = np.linspace(-1,1,300)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data)-0.5 + noise
with tf.name_scope('input'):
xs = tf.placeholder(tf.float32,[None,1],name='x_input') #加入名字name
ys = tf.placeholder(tf.float32,[None,1],name='y_input')
#第一层layer,即输入层,这里只有一个神经元
#第二层layer,即隐藏层,这里定义10个神经元
#第三层layer,这里为输出层,这里有一个神经元
#下面增加第二层,即这里的隐藏层
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu)
#下面定义输出层
prediction = add_layer(l1,10,1,activation_function=None)
#计算损失
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys -prediction),reduction_indices=[1]),name='mean')
#训练
with tf.name_scope('train'):
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
sess = tf.Session()
writer = tf.summary.FileWriter("desktop",sess.graph)
#初始所有变量
init = tf.global_variables_initializer()
sess.run(init)
这样桌面便出现了events.out。但我在win10下无法打开。
*点击[这儿:TensorFlow]发现更多关于TensorFlow的文章*
2 TensorFlow入门笔记之建造神经网络并将结果可视化的更多相关文章
- 1 TensorFlow入门笔记之基础架构
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构
Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor) 基于张量的各种操作 计算图(Computation Graph) 自动微分(A ...
- Tensorflow学习笔记03-使用神经网络做线性回归
import tensorflow as tf import numpy as np #input就是输入数据,输入矩阵,in_size就是输入矩阵的列数(数据属性数量),out_size输出矩阵列数 ...
- 5 TensorFlow入门笔记之RNN实现手写数字识别
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- tensorflow学习笔记七----------卷积神经网络
卷积神经网络比神经网络稍微复杂一些,因为其多了一个卷积层(convolutional layer)和池化层(pooling layer). 使用mnist数据集,n个数据,每个数据的像素为28*28* ...
- tensorflow入门笔记(五) name_scope和variable_scope
一.上下文管理器(context manager) 上下文管理器是实现了上下文协议的对象,主要用于资源的获取与释放.上下文协议包括__enter__.__exit__,简单说就是,具备__enter_ ...
- tensorflow入门笔记(二) 滑动平均模型
tensorflow提供的tf.train.ExponentialMovingAverage 类利用指数衰减维持变量的滑动平均. 当训练模型的时候,保持训练参数的滑动平均是非常有益的.评估时使用取平均 ...
- 【TensorFlow入门完全指南】神经网络篇·卷积神经网络
加载数据集. 这里的keep_prob是dropout的一个参数.dropout是一种随机置零的策略,用来防止模型过拟合. 这里定义两层,上面是卷积层,下面是池化层. 搭建了一层卷积.一层池化.一层卷 ...
- tensorflow入门笔记(四) tf.summary 模块
模块内的函数: tf.summary.audio(name, tensor, sample_rate, max_outputs=3, collections=None, family=None) 输出 ...
随机推荐
- Oracle的REGEXP_INSTR函数简单使用方法
REGEXP_INSTR函数让你搜索一个正則表達式模式字符串. 函数使用输入字符集定义的字符进行字符串的计算. 它返回一个整数,指示開始或结束匹配的子位置.这取决于return_option參数的值. ...
- splay旋转模板
splay旋转模板 void rotate(int x) { int y=f[x],z=son(x);f[x]=f[y]; if (f[x]) t[f[x]][son(y)]=x; t[y][z]=t ...
- 【Java】对文件或文件夹进行重命名
在Java中,对文件或文件夹进行重命名是很简单的,因为Java的File类已经封装好renameTo的方法. 修改文件或者文件夹的名字都使用这个方法.例如如下的程序: import java.io.* ...
- android webview处理h5打开本地文件浏览器的功能
这周遇到一个比较棘手的问题,需要在android上边集成h5页面,并且在h5页面上,需要用户能够上传android本地的照片,一开始我以为webview会自动处理掉的,因此没太留意,当真正集成时,才发 ...
- Could not resolve dependencies for project
最近项目上使用的是idea ide的多模块话,需要模块之间的依赖,比如说系统管理模块依赖授权模块进行认证和授权,而认证授权模块需要依赖系统管理模块进行,然后,我就开始相互依赖,然后出现这样的问题: “ ...
- php判断今日是本月的第几个星期几
php判断今日是本月的第几个星期几 php中有一个非常强悍的系统函数date()函数.巧妙的利用他可以实现显示任意我们需要的时间.比如今天遇到个需要是要判断今天是本月的第几个星期几,这里就不讨论这种说 ...
- python eval() hasattr() getattr() setattr() 函数使用方法详解
eval() 函数 --- 将字符串str当成有效的表达式来求值并返回计算结果. 语法:eval(source[, globals[, locals]]) ---> value 参数: sour ...
- 下面的那一个不属于MVC模式中的对象?
下面的那一个不属于MVC模式中的对象? A. Model B. View C. Collection D. Controller 解答:C MVC是三个单词的缩写,分别为: 模型(Model),视图( ...
- 20140710文安c++面试总结
这次去文安面试并未是我想象中的那个样子,可能有如下原因: 1.招聘旺季已过,仅剩下c++这个职位 2.并未做过面试前大公司的面试技巧-做面试题 面试过程基本就是先做面试题: 1.试题分布式-逻辑题.分 ...
- 基于chrome内核的.NET开发资源
chrome Frame: 让IE有一颗chrome的心,看起来不错,但我没有深入研究这个东西. http://www.google.com/chromeframe?hl=zh-CN&quic ...