提交 9db285f2 编写于 作者: W wizardforcel

2020-08-31 17:08:15

上级 06ae8c08
......@@ -8,13 +8,13 @@
* 使用 MLP 的 MNIST 分类器
* 使用 MLP 进行函数逼近-预测波士顿房价
* 调整超参数
* 更高级别的 API-硬
* 更高级别的 API -- Keras
# 介绍
神经网络,通常也称为**连接器模型**,是受人脑启发的。 像人的大脑一样,神经网络是通过称为**权重**的突触强度相互连接的大量人工神经元的集合。 正如我们通过长辈提供给我们的示例进行学习一样,人工神经网络也可以通过作为训练数据集提供给他们的示例进行学习。 有了足够数量的训练数据集,人工神经网络可以概括信息,然后也可以将其用于看不见的数据。 太棒了,它们听起来像魔术!
神经网络并不是什么新鲜事物。 第一个神经网络模型由 [McCulloch Pitts(MCP)](http://vordenker.de/ggphilosophy/mcculloch_a-logical-calculus.pdf)最早在 1943 年提出。 建造了第一台计算机!)该模型可以执行 AND / OR / NOT 之类的逻辑运算。 MCP 模型具有固定的权重和偏差; 没有学习的可能。 几年后,[Frank Rosenblatt 在 1958 年解决了这个问题](https://blogs.umass.edu/brain-wars/files/2016/03/rosenblatt-1957.pdf)。 他提出了第一个学习神经网络,称为**感知机**
神经网络并不是什么新鲜事物。 第一个神经网络模型由 [McCulloch Pitts(MCP)](http://vordenker.de/ggphilosophy/mcculloch_a-logical-calculus.pdf)最早在 1943 年提出。 建造了第一台计算机!)该模型可以执行 AND/OR/NOT 之类的逻辑运算。 MCP 模型具有固定的权重和偏差; 没有学习的可能。 几年后,[Frank Rosenblatt 在 1958 年解决了这个问题](https://blogs.umass.edu/brain-wars/files/2016/03/rosenblatt-1957.pdf)。 他提出了第一个学习神经网络,称为**感知机**
从那时起,众所周知,添加多层神经元并建立一个深而密集的网络将有助于神经网络解决复杂的任务。 正如母亲为孩子的成就感到自豪一样,科学家和工程师对使用[**神经网络**(**NN**)](https://www.youtube.com/watch?v=jPHUlQiwD9Y)。 这些声明不是虚假的,但是由于硬件计算的限制和复杂的网络结构,当时根本不可能实现它们。 这导致了 1970 年代和 1980 年代的 **AI 寒冬**。 在这些寒战中,由于很少或几乎没有对基于 AI 的项目提供资金,因此该领域的进展放缓了。
......@@ -117,7 +117,7 @@ with tf.Session() as sess:
![](img/609aa86e-74e6-486c-bb63-6a30f329c016.png)
3. **双曲正切激活函数**:在数学上,它是`(1 - exp(-2x) / (1 + exp(-2x))`。在形状上,它类似于 Sigmoid 函数,但是它以 0 为中心,范围为-1 至 1。TensorFlow 具有内置函数`tf.tanh`,用于双曲正切激活函数:
3. **双曲正切激活函数**:在数学上,它是`(1 - exp(-2x) / (1 + exp(-2x))`。在形状上,它类似于 Sigmoid 函数,但是它以 0 为中心,范围为 -1 至 1。TensorFlow 具有内置函数`tf.tanh`,用于双曲正切激活函数:
```py
# Plotting Hyperbolic Tangent Activation function
......@@ -223,7 +223,7 @@ with tf.Session() as sess:
![](img/b9c0550a-5f1e-4f60-b618-58445d70c13b.png)
这是学习率。 为了简化编程,可以将偏置作为附加权重添加,输入固定为+1。 然后,前面的等式可用于同时更新权重和偏差。
这是学习率。 为了简化编程,可以将偏置作为附加权重添加,输入固定为 +1。 然后,前面的等式可用于同时更新权重和偏差。
# 怎么做...
......@@ -364,7 +364,7 @@ mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
```
3. 定义超参数和其他常量。 在这里,每个手写数字的大小为 28 x 28 = 784 像素。 数据集分为 10 类,因为数字可以是 0 到 9 之间的任何数字。这两个是固定的。 学习率,最大时期数,要训练的迷你批次的批次大小以及隐藏层中神经元的数量都是超参数。 可以与他们一起玩耍,看看它们如何影响网络行为:
3. 定义超参数和其他常量。 在这里,每个手写数字的大小为`28 x 28 = 784`像素。 数据集分为 10 类,因为数字可以是 0 到 9 之间的任何数字。这两个是固定的。 学习率,最大时期数,要训练的迷你批次的批次大小以及隐藏层中神经元的数量都是超参数。 可以与他们一起玩耍,看看它们如何影响网络行为:
```py
# Data specific constants
......@@ -817,7 +817,7 @@ best_loss = 2
# It can be any number, but it would be better if you keep it same as the loss you achieved from your base model defined in steps 1 and 2
```
6. 将模型包装在 for 循环中以提高学习率; 然后保存任何可以更好地估计损失的模型:
6. 将模型包装在`for`循环中以提高学习率; 然后保存任何可以更好地估计损失的模型:
```py
... # Load and preprocess data
......@@ -853,7 +853,7 @@ for epoch in epochs:
* [另一个有关 Hyperopt 的内容](http://fastml.com/optimizing-hyperparams-with-hyperopt/)
* [Bengio 和其他人撰写的有关超参数优化各种算法的详细论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)
# 更高级别的 API-硬
# 更高级别的 API -- Keras
Keras 是将 TensorFlow 作为后端使用的高级 API。 向其添加层就像添加一行代码一样容易。 在建立模型架构之后,您可以使用一行代码来编译和拟合模型。 以后,它可以用于预测。 变量,占位符甚至会话的声明均由 API 管理。
......@@ -883,7 +883,7 @@ mode.add(Dense(32, input_dim=13, activation='relu')) ))
model.add(10, activation='sigmoid')
```
4. 定义模型后,我们需要选择`loss`函数和优化器。 Keras 提供了多种`loss_functions``mean_squared_error``mean_absolute_error``mean_absolute_percentage_error``categorical_crossentropy`; 和优化程序:sgd,RMSprop,Adagrad,Adadelta,Adam 等。 决定了这两个条件后,我们可以使用`compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)`配置学习过程:
4. 定义模型后,我们需要选择`loss`函数和优化器。 Keras 提供了多种`loss_functions``mean_squared_error``mean_absolute_error``mean_absolute_percentage_error``categorical_crossentropy`; 和优化程序:SGD,RMSprop,Adagrad,Adadelta,Adam 等。 决定了这两个条件后,我们可以使用`compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)`配置学习过程:
```py
model.compile(optimizer='rmsprop',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册