机器学习实战——基于Scikit-Learn和TensorFlow 阅读笔记 之 第十章:人工神经网络简介_xbs118的博客-程序员宅基地

技术标签: scikitl-learn  人工神经网络  DNN  《机器学习实战——基于Scikit-Learn和TensorFlow》  TensorFlow  机器学习实战  

《机器学习实战——基于Scikit-Learn和TensorFlow》
这是一本非常好的机器学习和深度学习入门书,既有基本理论讲解,也有实战代码示例。
我将认真阅读此书,并为每一章内容做一个知识笔记。
我会摘录一些原书中的关键语句和代码,若有错误请为我指出。

在这里插入图片描述

第十章 人工神经网络简介

1 从生物神经元到人工神经元

兴起的原因:

  • 海量数据
  • 计算能力提升
  • 训练算法提升
  • 理论限制被接受
  • 资金技术良性循环

1.1 生物神经元

。。。。。。

1.2 具有神经元的逻辑计算

与或非们

1.3 感知器

最简单的ANN架构之一。

heabiside和sgn两种阶跃函数。

单层感知器无法解决异或分类问题,可以使用多层感知器解决。

def heaviside(z):
    return (z >= 0).astype(z.dtype)

def mlp_xor(x1, x2, activation=heaviside):
    return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)
    
x1s = np.linspace(-0.2, 1.2, 100)
x2s = np.linspace(-0.2, 1.2, 100)
x1, x2 = np.meshgrid(x1s, x2s)

z1 = mlp_xor(x1, x2, activation=heaviside)
z2 = mlp_xor(x1, x2, activation=sigmoid)

plt.figure(figsize=(10,4))

plt.subplot(121)
plt.contourf(x1, x2, z1)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("Activation function: heaviside", fontsize=14)
plt.grid(True)

plt.subplot(122)
plt.contourf(x1, x2, z2)
plt.plot([0, 1], [0, 1], "gs", markersize=20)
plt.plot([0, 1], [1, 0], "y^", markersize=20)
plt.title("Activation function: sigmoid", fontsize=14)
plt.grid(True)

1.4 多层感知器和反向传播

一个MLP包含一个输入层,一个或多个被成为隐藏层的LTU层,以及一个被称为输出层的LTU组成的最终层。

除了输出层外,没层都包含一个偏移神经元,并且与下一层完全相连。

如果一个ANN有2个以及以上的隐藏层,则别成为深度神经网络(DNN)。

反向传播:略。

阶跃函数替换为逻辑函数,以便反向计算梯度。

2 用TensorFlow的高级API来训练MLP

3 使用纯TensorFlow训练DNN

3.1 构建阶段

def neuron_layer(X, n_neurons, name, activation=None):
    with tf.name_scope(name):
        n_inputs = int(X.get_shape()[1])
        stddev = 2 / np.sqrt(n_inputs)
        init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)
        W = tf.Variable(init, name="kernel")
        b = tf.Variable(tf.zeros([n_neurons]), name="bias")
        Z = tf.matmul(X, W) + b
        if activation is not None:
            return activation(Z)
        else:
            return Z

with tf.name_scope("dnn"):
    hidden1 = neuron_layer(X, n_hidden1, name="hidden1",
                           activation=tf.nn.relu)
    hidden2 = neuron_layer(hidden1, n_hidden2, name="hidden2",
                           activation=tf.nn.relu)
    logits = neuron_layer(hidden2, n_outputs, name="outputs")

with tf.name_scope("loss"):
    xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,
                                                              logits=logits)
    loss = tf.reduce_mean(xentropy, name="loss")

def shuffle_batch(X, y, batch_size):
    rnd_idx = np.random.permutation(len(X))
    n_batches = len(X) // batch_size
    for batch_idx in np.array_split(rnd_idx, n_batches):
        X_batch, y_batch = X[batch_idx], y[batch_idx]
        yield X_batch, y_batch

3.2 执行阶段

with tf.Session() as sess:
    init.run()
    for epoch in range(n_epochs):
        for X_batch, y_batch in shuffle_batch(X_train, y_train, batch_size):
            sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
        acc_batch = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
        acc_val = accuracy.eval(feed_dict={X: X_valid, y: y_valid})
        print(epoch, "Batch accuracy:", acc_batch, "Val accuracy:", acc_val)

    save_path = saver.save(sess, "./my_model_final.ckpt")

3.3 使用神经网络

先从硬盘上加载模型参数,然后加载数据集即可。

4 微调神经网络的超参数

神经网络的灵活性恰好是主要的短板:太多的超参数需要调整。
=> 交叉验证网格搜索
=> Oscar工具

4.1 隐藏层的个数

逐渐增减调试过拟合和欠拟合情况、

4.2 每个隐藏层中的神经元数

逐步添加神经元的数量,知道出现过拟合。

可以使用更多的层次和神经元,然后提早结束训练来避免过度拟合。

dropout。

4.3 激活函数

大多数情况隐藏层可使用ReLU。

输出可用sofmax,回归可不用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38262728/article/details/88551453

智能推荐

linux环境下miniconda3 虚拟环境管理以及内网下的依赖包安装方法_maligebilaowang的博客-程序员宅基地

虚拟环境管理相关的命令查看已经存在的虚拟环境(base) [wss@i-gjt0cuup ~]$ conda env list# conda environments:#disamb /home/wss/.conda/envs/disambbase * /opt/miniconda3DeepLearning /opt/miniconda3/envs/DeepLearningexample

Problem F_weixin_34092455的博客-程序员宅基地

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 84 Accepted Submission(s) : 25Problem Description某部队进行新兵队列训练,将新兵从一開始按顺序依次编号,并排成一行横队。训练...

iOS7适配_weixin_34037173的博客-程序员宅基地

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 if ( IOS7_OR_LATER ) { self.edgesForExtendedLayout = UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars = NO; ...

java 如何循环执行一个对象_Python基础知识储备,如何开关一个while循环_weixin_39630247的博客-程序员宅基地

一、什么是循环循环语句就是在某种条件下,一遍一遍重复的执行某个动作。如:从1加到100,重复执行加法的动作,就需要用到循环。二、循环的三要素虽然循环是反复的执行某个动作,但是循环也会停止的,没有停止的循环就是死循环;程序如果写出死循环,这个程序就有问题,所以任何一个程序都会有结束条件,结束条件往往是和变量关联的。循环的三要素包括:循环变量:控制循环,并控制循环结束的条件,每次循环变量都会..._java中如何循环一个对象

linux 命令——31 /etc/group文件(转)_dianxian5113的博客-程序员宅基地

  Linux/etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件。 linux/etc/group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有/etc/...

Leetcode 26 Remove Duplicates from Sorted Array_triplebee的博客-程序员宅基地

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with

随便推点

android停止蓝牙音乐服务器,Android的蓝牙操作常见问题_章兮苒的博客-程序员宅基地

BluetoothAdapter是所有Android内对蓝牙操作的入口首先需要声明BluetoothAdapter类型的变量BluetoothAdapter mbluetoothAdapter;在对本地蓝牙进行操作之前,需要先判断本地蓝牙是否已经打开mbluetoothAdapter.isEnabled();当判断蓝牙为打开之后,调用适配器的方法来打开蓝牙mbluetoothAdapter.ena..._android 退出蓝牙音乐demo

从docker到kubernetes实践全接触第二版的java web例子_kubernetes javaweb实例_benarchen的博客-程序员宅基地

从docker到kubernetes实践全接触第二版的java web例子_kubernetes javaweb实例

Linux文件系统中/tmp的临时文件清理说明_weixin_30414635的博客-程序员宅基地

https://www.cnblogs.com/MonkeyAC/articles/3631401.html转载于:https://www.cnblogs.com/diyunpeng/p/9796062.html

火星坐标、百度坐标、WGS84坐标、墨卡托投影坐标相互转换_火星坐标转投影坐标_周达的博客-程序员宅基地

百度坐标转火星坐标/*百度坐标转火星坐标*/x_pi=3.14159265358979324 * 3000.0 / 180.0;function baiduTomars(baidu_point){ var mars_point={lon:0,lat:0}; var x=baidu_point.lon-0.0065; var y=baidu_point.lat-0...._火星坐标转投影坐标

基于DM642 RAW采集格式的视频驱动开发及应用_weixin_33805992的博客-程序员宅基地

摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析、修改用于标准格式的视频驱动,使其优化后适用于RAW采集格式,在此基础上开发了基于多级缓存管理机制的应用程序,最终达到采集速率至少每秒15帧的要求。      �关键词:视频驱动;DM642;CCD高清传感器;RAW采集格式..._dm642 内核和应用软件

win10远程桌面Android软件,不用第三方软件,远程控制你的 Windows10 系统_gk-auto的博客-程序员宅基地

如果你使用的是 Windows10 系统,其实不需要安装第三方软件,就能在任何地方用电脑或手机控制它。首先,我们在需要被控制的电脑上,点击开始菜单点击【设置】按钮再点击【系统】点击左边栏的【关于】你能在这里看到设备名称需要把它记下来,当然,如果原来的名字难以记忆,你可以点击【重命名这台电脑】然后重启即可。然后,在左边栏点击【远程桌面】在这里,启用远程桌面然后我们需要防止这台计算机自动休眠,可以在当..._不使用第三方软件,手机怎么控制电脑

推荐文章

热门文章

相关标签