kaggleIntrotoDeepLearningASingleNeuron
Welcome to Deep Learning!
欢迎来到 Kaggle 的“深度学习入门”课程!您将学习构建自己的深度神经网络所需的一切知识。您将学习如何使用 Keras 和 Tensorflow:
- 创建全连接神经网络架构
- 将神经网络应用于两个经典的机器学习问题:回归和分类
- 使用随机梯度下降训练神经网络,以及
- 使用dropout、批量归一化和其他技术提升性能
本教程将通过完整的示例向您介绍这些主题,然后在练习中,您将更深入地探索这些主题,并将其应用于实际数据集。
让我们开始吧!
What is Deep Learning?
近年来,人工智能领域一些最令人瞩目的进步都集中在深度学习领域。在自然语言翻译、图像识别和游戏玩法等任务中,深度学习模型的表现已经接近甚至超越了人类水平。
那么,什么是深度学习呢?深度学习是一种以深度计算为特征的机器学习方法。正是这种计算深度使得深度学习模型能够解析现实世界中最具挑战性数据集中各种复杂且层次化的模式。
凭借其强大的功能和可扩展性,神经网络已成为深度学习的标志性模型。神经网络由神经元组成,每个神经元单独执行简单的计算。神经网络的强大之处在于这些神经元能够形成的连接的复杂性。
The Linear Unit
那么,让我们从神经网络的基本组成部分——单个神经元——开始。一个具有一个输入的神经元(或单元)的示意图如下:
线性单位:y=wx+b
输入为“x”。它与神经元的连接具有权重,即“w”。每当一个值流经连接时,就将该值乘以连接的权重。对于输入“x”,到达神经元的值是“w * x”。神经网络通过修改其权重来“学习”。
“b”是一种特殊的权重,我们称之为偏差。偏差不与任何输入数据关联;相反,我们在图中放置一个“1”,这样到达神经元的值就是“b”(因为“1 * b = b”)。偏差使神经元能够独立于输入修改输出。
“y”是神经元最终输出的值。为了得到输出,神经元会将其通过连接接收到的所有值相加。该神经元的激活函数为“y = w * x + b”,或者用公式 y=wx+b 表示。
y=wx+b 这个公式看起来熟悉吗?
这是一条直线方程!它是一个斜率截距方程,其中 w 是斜率,b 是 y 轴截距。
Example - The Linear Unit as a Model
虽然单个神经元通常只作为大型网络的一部分发挥作用,但以单神经元模型作为基线通常很有用。单神经元模型是线性模型。
让我们思考一下这在像 80 Cereals 这样的数据集上如何运作。以“糖”(每份含糖量)作为输入,“卡路里”(每份卡路里)作为输出来训练模型,我们可能会发现偏差为“b=90”,权重为“w=2.5”。我们可以像这样估算每份含糖 5 克的谷物的卡路里含量:

使用线性单位计算。
根据我们的公式,卡路里=2.5×5+90=102.5,正如我们预期的那样。
Multiple Inputs
80 种谷物 数据集包含的功能远不止“糖”。如果我们想扩展模型,使其包含纤维或蛋白质含量等信息,该怎么办?这很简单。我们只需为神经元添加更多输入连接,每个新增功能对应一个连接。为了计算输出,我们将每个输入与其连接权重相乘,然后将它们全部相加。
具有三个输入的线性单元。
该神经元的公式为 y=w0x0+w1x1+w2x2+b。具有两个输入的线性单元将拟合一个平面,而具有更多输入的单元将拟合一个超平面。
Linear Units in Keras
在 Keras 中创建模型最简单的方法是使用 keras.Sequential,它会创建一个由多个 层 组成的神经网络。我们可以使用 dense 层(我们将在下一课中详细了解)来创建类似上述模型。
我们可以定义一个线性模型,接受三个输入特征(“糖”、“纤维”和“蛋白质”),并产生一个输出(“卡路里”),如下所示:
from tensorflow import keras |
第一个参数 units 定义了所需的输出数量。在本例中,我们只预测 'calories'',因此我们将使用 units=1`。
第二个参数 input_shape 指定了 Keras 输入的维度。设置 input_shape=[3] 可确保模型接受三个特征作为输入(“糖”、“纤维”和“蛋白质”)。
现在,该模型已准备好用于训练数据拟合!
为什么
input_shape是一个 Python 列表?
本课程中使用的数据将是表格数据,类似于 Pandas 数据框。数据集中的每个特征都会有一个输入。这些特征按列排列,因此input_shape始终为 [列数]。Keras 在这里使用列表是为了允许使用更复杂的数据集。例如,图像数据可能需要三个维度:[高度, 宽度, 通道数]。
