1.4激活函数-带隐层的神经网络tf实战

激活函数

激活函数----日常不能用线性方程所概括的东西

左图是线性方程,右图是非线性方程

当男生增加到一定程度的时候,喜欢女生的数量不可能无限制增加,更加趋于平稳

在线性基础上套了一个激活函数,使得最后能得到输出结果

常用的三种激活函数:

取值不同时得到的结果也不同

常见激活函数图形

tensorflow中自带的激活函数举例:

添加隐层的神经网络

#添加隐层的神经网络结构
import tensorflow as tf

def add_layer(inputs,in_size,out_size,activation_function=None):
    #定义权重--随机生成inside和outsize的矩阵
    Weights=tf.Variable(tf.random_normal([in_size,out_size]))
    #不是矩阵,而是类似列表
    biaes=tf.Variable(tf.zeros([1,out_size])+0.1)
    Wx_plus_b=tf.matmul(inputs,Weights)+biaes
    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] #300行数据
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.5+noise
#None指定sample个数,这里不限定--输出属性为1
xs=tf.placeholder(tf.float32,[None,1])  #这里需要指定tf.float32,
ys=tf.placeholder(tf.float32,[None,1])

#建造第一层layer
#输入层(1)
l1=add_layer(xs,1,10,activation_function=tf.nn.relu)
#隐层(10)
prediction=add_layer(l1,10,1,activation_function=None)
#输出层(1)
#预测prediction
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),
                   reduction_indices=[1])) #平方误差
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

init=tf.initialize_all_variables()
sess=tf.Session()
#直到执行run才执行上述操作
sess.run(init)
for i in range(1000):
    #这里假定指定所有的x_data来指定运算结果
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i%50:
        print (sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

显示:

1.11593
0.26561
0.167872
0.114671
0.0835957
0.0645237
0.0524448
0.0446363
0.039476
0.0360211
0.0336599
0.0320134
0.0308378
0.0299828
0.029324
0.0287996
0.0283558
0.0279624
0.0276017
0.02726
0.0269316
0.0266103
0.026298
0.0259914
0.0256905
0.025395
0.0251055
0.0248204
0.024538
0.0242604
0.023988
0.0237211
0.0234583
0.0231979
0.0229418
0.0226901
0.0224427
0.0221994
0.0219589
0.0217222
0.0214888
0.0212535
0.0210244
0.0207988
0.0205749
0.0203548
0.0201381

增加np.newaxis

np.newaxis 为 numpy.ndarray(多维数组)增加一个轴

>> type(np.newaxis)
NoneType
>> np.newaxis == None
True

np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名。

1. np.newaxis 的实用

>> x = np.arange(3)
>> x
array([0, 1, 2])
>> x.shape
(3,)

>> x[:, np.newaxis]
array([[0],
       [1],
       [2]])

>> x[:, None]
array([[0],
       [1],
       [2]])

>> x[:, np.newaxis].shape
 (3, 1)

2. 索引多维数组的某一列时返回的是一个行向量

>>> X = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
>>> X[:, 1]
array([2, 6, 10])       % 这里是一个行
>>> X[:, 1].shape       % X[:, 1] 的用法完全等同于一个行,而不是一个列,
(3, )

如果我们索引多维数组的某一列时,返回的仍然是列的结构,一种正确的索引方式是:

>>>X[:, 1][:, np.newaxis]
array([[2],
      [6],
      [10]])

如果想实现第二列和第四列的拼接(层叠):

>>>X_sub = np.hstack([X[:, 1][:, np.newaxis], X[:, 3][:, np.newaxis]])
                   % hstack:horizontal stack,水平方向上的层叠
>>>X_sub
array([[2, 4]
      [6, 8]
      [10, 12]])

当然更为简单的方式还是使用切片:

>> X[:, [1, 3]]
array([[ 2,  4],
       [ 6,  8],
       [10, 12]])
时间: 2024-11-08 01:37:57

1.4激活函数-带隐层的神经网络tf实战的相关文章

可变多隐层神经网络的python实现

说明:这是我对网上代码的改写版本(基于win7 + python34) 一.先说说改动的部分 1) 改写了NetStruct类初始化函数 原来: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(self, x, y, hidden_layers, activ_fun_list, performance_function = 'mse'): 现在: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(s

python实现单隐层神经网络基本模型

应朋友之请写了一份python实现单隐层BP Ann model的code,好久没写博客,就顺便发上来.这篇代码比较干净利落,比较纯粹的描述了Ann的基本原理,初学机器学习的同学可以参考. 模型中几个比较重要的参数: 1.学习率 学习率是影响模型收敛的重要因素,一般来说要根据具体场景灵活调整,过高的学习率会使得函数快速发散. 2.隐元数量 一般来说,增加隐层中神经元的数量比直接增加隐层更加有效,这也是单隐层神经网络的特点.对于复杂程度不算太高的问题而言,单隐层的效果优于多隐层. 3.随机种子位数

用C实现单隐层神经网络的训练和预测(手写BP算法)

实验要求:?实现10以内的非负双精度浮点数加法,例如输入4.99和5.70,能够预测输出为10.69?使用Gprof测试代码热度 代码框架?随机初始化1000对数值在0~10之间的浮点数,保存在二维数组a[1000][2]中.?计算各对浮点数的相加结果,保存在数组b[1000]中,即b[0] = a[0][0] + a[0][1],以此类推.数组a.b即可作为网络的训练样本.?定义浮点数组w.v分别存放隐层和输出层的权值数据,并随机初始化w.v中元素为-1~1之间的浮点数.?将1000组输入(a

[翻译博文]线性隐层单元并不存在

译自:Don't Interpret Linear Hidden Units, they do not exist! http://building-babylon.net/2016/10/19/dont-interpret-linear-hidden-units-they-dont-exist/ 已经训练好了模型,很自然的想到该如何理解该模型.数据点最大化隐层单元的激活函数,将数据点输入特征视为指示哪个单元来重组.下面是对隐层单元的误解: 隐层没有非线性单元: 层间权重无约束: 采用(随机)梯

Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐层的平面数据分类)

Planar data classification with one hidden layer 你会学习到如何: 用单隐层实现一个二分类神经网络 使用一个非线性激励函数,如 tanh 计算交叉熵的损失值 实现前向传播和后向传播 原文地址:https://www.cnblogs.com/douzujun/p/10289799.html

CS224d 单隐层全连接网络处理英文命名实体识别tensorflow

什么是NER? 命名实体识别(NER)是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词等.命名实体识别是信息提取.问答系统.句法分析.机器翻译等应用领域的重要基础工具,作为结构化信息提取的重要步骤. NER具体任务 1.确定实体位置 2.确定实体类别 给一个单词,我们需要根据上下文判断,它属于下面四类的哪一个,如果都不属于,则类别为0,即不是实体,所以这是一个需要分成 5 类的问题: ? Person (PER) ? Organization (ORG) ? Locatio

jquery封装了一个简洁轻巧的可拖动可自定义样式的纯div+css带遮罩层的仿模态弹出框

最近封装上瘾,想起以前做的一个轻巧的弹出框,是样式和脚本分离的,于是重新封装了一下,把样式标签统一到js里了. 里面还有一些问题,但不影响使用,有兴趣的同学,可以参考完善下,有好的建议,请不吝赐教. var PopDialogDefaultConfig = { hasCover: true, //是否带遮罩层 colorOfCover: "#000", //遮罩层颜色 transparencyOfCover: 80, //遮罩层透明度(alpha值,opacity值通过换算得到) bo

Axure RP使用攻略--带遮罩层的弹出框(9)

实现目标: 1.   点击按钮弹出带遮罩层的对话框: 2.   页面上下左右滚动时,弹出的对话框水平和垂直始终居中. 实现步骤如下: 1. 拖入编辑区2个矩形,并点右键-转换-转换为动态面板: 2. 双击其中一个动态面板设置标签为"遮罩层"(看个人喜好随便命名),并双击状态1进入编辑: 3. 点击状态1里面的矩形,设置大小与网站页面大小相同,以便完全遮盖:然后,设置矩形边框为"无":最后设置填充色的透明度为50%(看个人喜好),并选择填充色为灰色(看个人喜好): 4

加载进度圈,带遮罩层(jquery)

如图: Js下载地址:http://files.cnblogs.com/files/holdon521/cvi_busy_lib.js 如下使用实例: <script src="/static/js/cvi_busy_lib.js"></script> <script type="text/javascript"> var xval=getBusyOverlay('viewport',{color:'white', opacity