咱们在这篇文章中将了解与练习深度学习的构建模块--线性单元。

开始深度学习的入门练习

利用这个系列的文章,您即将学习到构建自己的深度神经网络所需的一切。

通过使用Keras和Tensorflow,您将学习以下内容:

咱们这个系列文章将通过完整的实例向您介绍这些主题,然后在练习中,您将更深入地探索这些主题,并将它们应用于真实世界的数据集中。

现在让我们开始!


深度学习究竟是什么?

最近几年人工智能领域最令人印象深刻的进展之一是深度学习领域。

自然语言翻译、图像识别和游戏玩耍等任务,深度学习模型已经接近甚至超过了人类水平的表现。

那么什么是深度学习呢?

通过其强大的能力和可伸缩性,神经网络已成为深度学习的定义模型。

神经网络由神经元组成,每个神经元仅执行简单的计算。

神经网络的强大之处在于这些神经元之间可以形成复杂的连接。

线性单元

让我们从神经网络的基本组件开始:单个神经元。

作为一个图示,具有一个输入的神经元(或单元)如下所示:

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

输入是x。它与神经元的连接具有权重w。

当一个值通过连接流动时,你将该值乘以连接的权重对于输入x,到达神经元的值为w * x。神经网络通过修改它的权重来"学习"。

b是一种特殊的重量,我们称之为偏置偏置没有与之关联的输入数据

相反,我们在图中放置一个1,以使到达神经元的值只是b(因为1 * b = b)偏置使神经元能够独立于其输入来修改输出。

y是神经元最终输出的值为了得到输出,神经元将通过其连接接收到的所有值相加起来。

这个公式 y=wx+b 看起来熟悉吗?

这是一条直线的方程这是斜率截距方程,其中 w 表示斜率,b 表示 y 轴截距。

例子 - 以线性单元为模型

尽管个体神经元通常只能作为更大网络的一部分发挥作用,但从单个神经元模型作为基线开始通常是有用的。单个神经元模型是线性模型。

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

而且,根据我们的公式检验,我们有卡路里=2.5×5+90=102.5,正如我们所预期的一样。

多重输入

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

这个神经元的公式是 y=w0x0+w1x1+w2x2+b具有两个输入的线性单元可以拟合一个平面,而具有更多输入的单元可以拟合一个超平面。

Keras中的线性单元

在Keras中创建模型的最简单方法是通过keras.Sequential,它将神经网络以一系列层的堆叠形式创建。

我们可以使用一个密集层(在以后的文章中咱们将学习更多)来创建像上面那样的模型。

我们可以这样定义一个线性模型,接收三个输入特征('sugars','fiber'和'protein'),并产生一个输出('calories'):

from tensorflow import keras
from tensorflow.keras import layers

# Create a network with 1 linear unit
model = keras.Sequential([
    layers.Dense(units=1, input_shape=[3])
])

使用第一个参数units我们定义了我们想要的输出数量。在这种情况下,我们只是预测“卡路里”,所以我们将使用units=1。

使用第二个参数input_shape,我们告诉Keras输入的维度。设置input_shape = [3]确保模型将接受三个特征作为输入('sugars','fiber'和'protein')。

这个模型现在已经准备好拟合训练数据了!

做个练习

在本文中,我们学习了神经网络的构建块:线性单元

我们看到,只有一个线性单元的模型可以将线性函数拟合到一个数据集上(等同于线性回归)

在这个练习中,你将构建一个线性模型,并在Keras中进行一些实践工作。

这个练习我们是在Kaggle中执行的,使用的数据已经由Kaggle准备好

# Setup plotting
import matplotlib.pyplot as plt

plt.style.use('seaborn-whitegrid')
# Set Matplotlib defaults
plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',
       titleweight='bold', titlesize=18, titlepad=10)

# Setup feedback system
from learntools.core import binder
binder.bind(globals())
from learntools.deep_learning_intro.ex1 import *

背景介绍

红葡萄酒质量数据集包括大约1600瓶葡萄牙红葡萄酒的理化测量数据。此外,还包括每瓶酒的品质评分,评分是通过盲品测试得出的。

首先,运行下一个单元格以显示该数据集的前几行数据。

import pandas as pd

red_wine = pd.read_csv('../input/dl-course-data/red-wine.csv')
red_wine.head()

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

您可以使用shape属性获取数据帧(或Numpy数组)的行数和列数。

red_wine.shape # (rows, columns)

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

1. 输入形状

我们能够从理化测量中准确预测葡萄酒的品质吗?目标是“品质 - quality”,其余的列是特征。你会如何设置Keras模型在此任务中的input_shape参数?

# YOUR CODE HERE
input_shape = ____

# Check your answer
q_1.check()

检查当您更新了初始代码后check()将告诉您您的代码是否正确。您需要更新创建变量input_shape的代码。

2. 定义一个线性模型

现在定义一个适合这个任务的线性模型。请注意模型应该有多少个输入和输出。

from tensorflow import keras
from tensorflow.keras import layers

# YOUR CODE HERE
model = ____

# Check your answer
q_2.check()

检查当你更新了起始代码后,check()函数将告诉你你的代码是否正确。你需要更新创建模型变量的代码。

3.查看权重

在内部,Keras使用张量来表示神经网络的权重

张量基本上是TensorFlow版本的Numpy数组,但有一些差异使其更适合深度学习。其中最重要的是,张量与GPU和TPU(张量处理器)加速器兼容。实际上,TPU是专门设计用于张量计算的。

# YOUR CODE HERE
w, b = ____

# Check your answer
q_3.check()

顺便说一下,Keras使用张量来表示权重,并且也使用张量来表示数据。

当你设置input_shape参数时,你告诉Keras训练数据中每个示例的数组应该具有的维度。

设置input_shape=[3]会创建一个接受长度为3的向量(例如[0.2, 0.4, 0.6])的网络。

可选:绘制一个未经训练的线性模型的输出

我们将通过接下来的文章解决的问题是回归问题,目标是预测某个数值目标。回归问题类似于“曲线拟合”问题:我们试图找到最适合数据的曲线。让我们来看一下线性模型产生的“曲线”。(你可能已经猜到了它是一条直线!

我们在之前提到过,在训练模型之前,模型的权重是随机设置的。运行下面的单元格几次,看看不同的随机初始化产生的线条。(这个练习没有编码,只是一个演示。

import tensorflow as tf
import matplotlib.pyplot as plt

model = keras.Sequential([
    layers.Dense(1, input_shape=[1]),
])

x = tf.linspace(-1.0, 1.0, 100)
y = model.predict(x)

plt.figure(dpi=100)
plt.plot(x, y, 'k')
plt.xlim(-1, 1)
plt.ylim(-1, 1)
plt.xlabel("Input: x")
plt.ylabel("Target y")
w, b = model.weights # you could also use model.get_weights() here
plt.title("Weight: {:0.2f}\nBias: {:0.2f}".format(w[0][0], b[0]))
plt.show()

演绎如下:

政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP


政安晨:【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(一)—— 单个神经元-LMLPHP

03-20 07:13