TFboy养成记 多层感知器 MLP

内容总结与莫烦的视频。

这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层。代码的目的是你和一个二次曲线。同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声。

添加层代码:

def addLayer(inputs,inSize,outSize,activ_func = None):#insize outsize表示输如输出层的大小,inputs是输入。activ_func是激活函数,输出层没有激活函数。默认激活函数为空
    with tf.name_scope(name = "layer"):
        with tf.name_scope("weigths"):
            Weights = tf.Variable(tf.random_normal([inSize,outSize]),name = "W")
        bias = tf.Variable(tf.zeros([1,outSize]),name = "bias")
        W_plus_b = tf.matmul(inputs,Weights)+bias
        if activ_func == None:
            return W_plus_b
        else:
            return activ_func(W_plus_b)

输入:

1 with tf.name_scope(name = "inputs"):#with这个主要是用来在tensorboard上显示用。
2     xs = tf.placeholder(tf.float32,[None,1],name = "x_input")#不是-1哦
3     ys = tf.placeholder(tf.float32,[None,1],name = "y_input")
4 l1 = addLayer(xs,1,10,activ_func= tf.nn.relu)
5 y_pre = addLayer(l1,10,1,activ_func=None)

其他部分:

需要注意的是

 1 with tf.name_scope("loss"):
 2     loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-y_pre),
 3                       reduction_indices=[1]))#这里reduction_indices=[1]类似于numpy中的那种用法,是指横向还是竖向,reduce_sum函数貌似主要是用于矩阵的,向量可以不使用
 4 with tf.name_scope("train"):
 5     train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
 6 #在以后的版本中,这里的initialize_all_variable()可能被逐步抛弃使用global_variable_init(大概是这么写的)那个函数。欢迎指正。
 7 init = tf.initialize_all_variables()#init这一步很重要,在训练前一定要是使用sess.run(init)操作(只要是你用到了Variable)
 8 writer = tf.summary.FileWriter("logs/",sess.graph)
 9 with tf.Session() as sess:
10
11     sess.run(init)
12
13     for i in range(1000):
14         sess.run(train_step,feed_dict = {xs:x_data,ys:y_data})
15         if i % 50 == 0:
16             print(sess.run(loss,feed_dict = {xs:x_data,ys:y_data}))#只要是你的操作中有涉及到placeholder一定要记得使用feed_dict

所有代码:

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Tue Jun 13 15:41:23 2017
 4
 5 @author: Jarvis
 6 """
 7
 8 import tensorflow as tf
 9 import numpy as np
10
11 def addLayer(inputs,inSize,outSize,activ_func = None):
12     with tf.name_scope(name = "layer"):
13         with tf.name_scope("weigths"):
14             Weights = tf.Variable(tf.random_normal([inSize,outSize]),name = "W")
15         bias = tf.Variable(tf.zeros([1,outSize]),name = "bias")
16         W_plus_b = tf.matmul(inputs,Weights)+bias
17         if activ_func == None:
18             return W_plus_b
19         else:
20             return activ_func(W_plus_b)
21 x_data = np.linspace(-1,1,300)[:,np.newaxis]
22 noise = np.random.normal(0,0.05,x_data.shape)
23 y_data = np.square(x_data)-0.5+noise
24
25 with tf.name_scope(name = "inputs"):
26     xs = tf.placeholder(tf.float32,[None,1],name = "x_input")#不是-1哦
27     ys = tf.placeholder(tf.float32,[None,1],name = "y_input")
28 l1 = addLayer(xs,1,10,activ_func= tf.nn.relu)
29 y_pre = addLayer(l1,10,1,activ_func=None)
30 with tf.name_scope("loss"):
31     loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-y_pre),
32                       reduction_indices=[1]))
33 with tf.name_scope("train"):
34     train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
35
36 init = tf.initialize_all_variables()
37 writer = tf.summary.FileWriter("logs/",sess.graph)
38 with tf.Session() as sess:
39
40     sess.run(init)
41
42     for i in range(1000):
43         sess.run(train_step,feed_dict = {xs:x_data,ys:y_data})
44         if i % 50 == 0:
45             print(sess.run(loss,feed_dict = {xs:x_data,ys:y_data}))

时间: 2024-10-05 04:25:22

TFboy养成记 多层感知器 MLP的相关文章

神经网络入门回顾(感知器、多层感知器)

神经网络属于“连接主义”,和统计机器学习的理论基础区别还是很不一样. 以我自己的理解,统计机器学习的理论基于统计学,理论厚度足够强,让人有足够的安全感:而神经网络的理论更侧重于代数,表征能力特别强,不过可解释性欠佳. 这两个属于机器学习的两个不同的流派,偶尔也有相互等价的算法. 本文回顾神经网络最简单的构件:感知器.多层感知器. 感知器 感知器是二类分类的线性分类模型,将实例划分为正负两类的分离超平面(separating hyperplane),属于判别模型. 感知器基于线性阈值单元(Line

多层感知器学习

1.多层感知器简介 多层感知器(MLP)可以看做一个逻辑回归,不过它的输入要先进行一个非线性变换,这样数据就被映射到线性可分的空间了,这个空间我们称为隐藏层.通常单层隐藏层就可以作为一个感知器了,其结构如下图所示: 这里输入层首先通过权重矩阵和偏置得到总输出值并且通过tanh函数作一个非线性变换就可以得到hidden layer,然后从hidden layer到output layer可以使用之前的逻辑回归进行操作. 这里我们同样使用SGD算法来对参数进行更新,参数共有四个,分别是input-h

RBF神经网络学习算法及与多层感知器的比较

对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. 一.RBF神经网络学习算法 广义的RBF神经网络结构如下图所示: N-M-L结构对应着N维输入,M个数据中心点centers,L个输出. RBF 网络常用学习算法 RBF 网络的设计包括结构设计和参数设计.结构设计主要解决如何确定网络隐节点数的问题.参数设计一般需考虑包括3种参数:各基函数的数据中心和扩展常

TFBOY 养成记 一些比较好多文章。

API解释中文版(简书文章,没事看看): http://www.jianshu.com/p/e3a79eac554f Tensorlfow op辨异:tf.add()与tf.nn.bias_add()区别: http://blog.csdn.net/lanchunhui/article/details/66477742

TFboy养成记 MNIST Classification (主要是如何计算accuracy)

参考:莫烦. 主要是运用的MLP.另外这里用到的是批训练: 这个代码很简单,跟上次的基本没有什么区别. 这里的lossfunction用到的是是交叉熵cross_entropy.可能网上很多形式跟这里的并不一样. 这里一段时间会另开一个栏.专门去写一些机器学习上的一些理论知识. 这里代码主要写一下如何计算accuracy: 1 def getAccuracy(v_xs,v_ys): 2 global y_pre 3 y_v = sess.run(y_pre,feed_dict={x:v_xs})

TFboy养成记 简单小程序(Variable &amp; placeholder)

学习参考周莫烦的视频. Variable:主要是用于训练变量之类的.比如我们经常使用的网络权重,偏置. 值得注意的是Variable在声明是必须赋予初始值.在训练过程中该值很可能会进行不断的加减操作变化. placeholder:也是用于存储数据,但是主要用于feed_dict的配合,接收输入数据用于训练模型等.placeholder值在训练过程中会不断地被赋予新的值,用于批训练,基本上其值是不会轻易进行加减操作. placeholder在命名时是不会需要赋予值得,其被赋予值得时间实在feed_

TFboy养成记 tf.cast,tf.argmax,tf.reduce_sum

referrence: 莫烦视频 先介绍几个函数 1.tf.cast() 英文解释: 也就是说cast的直译,类似于映射,映射到一个你制定的类型. 2.tf.argmax 原型: 含义:返回最大值所在的坐标.(谁给翻译下最后一句???) ps:谁给解释下axis最后一句话? 例子: 3.tf.reduce_mean() 原型: 含义:一句话来说就是对制定的reduction_index进行均值计算. 注意,reduction_indices为0时,是算的不同的[]的同一个位置上的均值 为1是是算

TFboy养成记 CNN

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sun Jul 2 19:59:43 2017 4 5 @author: Administrator 6 """ 7 import tensorflow as tf 8 import numpy as np 9 from tensorflow.examples.tutorials.mnist import input_data 10 11 def compu

TFboy养成记 tensorboard

首先介绍几个用法: with tf.name_scope(name = "inputs"): 这个是用于区分区域的.如,train,inputs等. xs = tf.placeholder(tf.float32,[None,1],name = "x_input") name用于对节点的命名. merged = tf.summary.merge_all() 注:这里很多代码可能跟莫烦老师的代码并不一样,主要是由于版本变迁,tensorflow很多函数改变. 这一步很重