提交 218cb740 编写于 作者: W wizardforcel

2020-08-05 10:46:49

上级 7170d2f3
......@@ -162,7 +162,7 @@ loss = tf.reduce_mean(tf.square(model - y_tensor))
* `tf.square(model - y_tensor)`计算每个残差的平方
* `tf.reduce_mean( ... )`最终计算在前一步骤中计算的平方均值
我们还定义**均方误差****mse**)和 **r 平方****rs**)函数来评估训练模型。我们使用单独的`mse`函数,因为在接下来的章节中,损失函数将改变但`mse`函数将保持不变。
我们还定义**均方误差****MSE**)和 **R 平方****RS**)函数来评估训练模型。我们使用单独的`mse`函数,因为在接下来的章节中,损失函数将改变但`mse`函数将保持不变。
```py
# mse and R2 functions
......@@ -196,8 +196,8 @@ TensorFlow 提供了许多其他优化器函数,如 Adadelta,Adagrad 和 Ada
* `num_epochs`:运行训练的迭代次数。每次迭代,模型都会学习更好的参数,我们将在后面的图中看到。
* `w_hat``b_hat`:收集估计的`w``b`参数。
* `loss_epochs``mse_epochs``rs_epochs`:收集训练数据集中的总误差值,以及每次迭代中测试数据集上模型的 mse 和 r 平方值。
* `mse_score``rs_score`:收集最终训练模型的 mse 和 r 平方值。
* `loss_epochs``mse_epochs``rs_epochs`:收集训练数据集中的总误差值,以及每次迭代中测试数据集上模型的 mse 和 R 平方值。
* `mse_score``rs_score`:收集最终训练模型的 mse 和 R 平方值。
```py
num_epochs = 1500
......@@ -232,7 +232,7 @@ loss_val = tfs.run(loss,feed_dict={x_tensor: X_train, y_tensor: y_train})
loss_epochs[epoch] = loss_val
```
计算测试数据预测值的均方误差和 r 平方值:
计算测试数据预测值的均方误差和 R 平方值:
```py
mse_score = tfs.run(mse,feed_dict={x_tensor: X_test, y_tensor: y_test})
......@@ -310,7 +310,7 @@ plt.show()
![](img/02e135a4-4a8a-47ad-a85e-48bec81ce693.png)
让我们绘制 r 平方的值:
让我们绘制 R 平方的值:
```py
plt.figure(figsize=(14,8))
......@@ -322,13 +322,13 @@ plt.legend()
plt.show()
```
当我们绘制 r 平方超过周期的值时,我们得到以下图:
当我们绘制 R 平方超过周期的值时,我们得到以下图:
![](img/b8c11857-8723-4d5c-9e56-a064607aabe8.png)
这基本上表明该模型以 r 的平均值开始,但随着模型的训练并减少误差,r 平方的值开始变高,最终在某一点变得稳定略高于 0.6。
这基本上表明该模型以 R 的平均值开始,但随着模型的训练并减少误差,R 平方的值开始变高,最终在某一点变得稳定略高于 0.6。
绘制 MSE 和 r-squared 可以让我们看到我们的模型得到多快的训练以及它开始变得稳定的地方,以便进一步的训练在减少错误方面产生微不足道的好处或几乎没有好处。
绘制 MSE 和 R 平方可以让我们看到我们的模型得到多快的训练以及它开始变得稳定的地方,以便进一步的训练在减少错误方面产生微不足道的好处或几乎没有好处。
# 使用训练的模型进行预测
......@@ -428,7 +428,7 @@ For test data : MSE = 30.48501778, R2 = 0.64172244
![](img/60be36ac-1116-4f4e-a5dc-15fffcea81f1.png)
正如我们在单变量数据集中看到的那样,我们看到了 MSE 和 r 平方的类似模式。
正如我们在单变量数据集中看到的那样,我们看到了 MSE 和 R 平方的类似模式。
# 正则化回归
......@@ -452,9 +452,9 @@ For test data : MSE = 30.48501778, R2 = 0.64172244
有关正则化的更多详细信息,[请参阅互联网上的这些资源](http://www.statisticshowto.com/regularization/)
一个简单的经验法则是当我们想要删除某些特征时使用 L1 或 Lasso,从而减少计算时间,但代价是降低了准确率。
一个简单的经验法则是当我们想要删除某些特征时使用 L1 或 LASSO,从而减少计算时间,但代价是降低了准确率。
现在让我们看看在 TensorFlow 中实现的这些正则化损失函数。我们将继续使用前面示例中使用的 Boston 数据集。
现在让我们看看在 TensorFlow 中实现的这些正则化损失函数。我们将继续使用前面示例中使用的波士顿数据集。
# LASSO 正则化
......@@ -537,7 +537,7 @@ print('For test data : MSE = {0:.8f}, R2 = {1:.8f} '.format(
For test data : MSE = 30.48978233, R2 = 0.64166653
```
让我们使用以下代码绘制 MSE 和 r 平方的值:
让我们使用以下代码绘制 MSE 和 R 平方的值:
```py
plt.figure(figsize=(14,8))
......@@ -651,7 +651,7 @@ For test data : MSE = 30.64177132, R2 = 0.63988018
# ElasticNet 正则化
笔记本`ch-04a_Regression`提供了 ElasticNet 正规回归的完整代码,用于训练模型以预测波士顿房屋定价。在运行模型时,w e 得到以下结果:
笔记本`ch-04a_Regression`提供了 ElasticNet 正规回归的完整代码,用于训练模型以预测波士顿房屋定价。在运行模型时,我们得到以下结果:
```py
For test data : MSE = 30.64861488, R2 = 0.63979971
......@@ -687,7 +687,7 @@ For test data : MSE = 30.64861488, R2 = 0.63979971
![](img/62e26ec4-6cff-4601-b544-cb79aa11a704.png)
sigmoid 函数在范围[0,1]之间产生 y 的值。因此,我们可以使用`y = φ(z)`的值来预测类:如果`y > 0.5`则 class 等于 1,否则 class 等于 0。
sigmoid 函数在范围`[0, 1]`之间产生 y 的值。因此,我们可以使用`y = φ(z)`的值来预测类:如果`y > 0.5`则类别等于 1,否则类别等于 0。
正如我们在本章的前几节中所见,对于线性回归,可以通过查找最小化损失函数的参数来训练模型,并且损失函数可以是平方误差或均方误差的总和。对于逻辑回归,我们希望最大化可能性:`L(w) = P(y|x, w, b)`
......@@ -697,7 +697,7 @@ sigmoid 函数在范围[0,1]之间产生 y 的值。因此,我们可以使用`
![](img/43249834-ffa5-490f-842b-3be538ea34e8.png)
其中`φ(z)`是 S函数。
其中`φ(z)`是 Sigmoid 函数。
我们将在下一节中实现这个损失函数。
......@@ -707,7 +707,7 @@ sigmoid 函数在范围[0,1]之间产生 y 的值。因此,我们可以使用`
![](img/31227522-ba57-4b0d-a624-566ce56452aa.png)
Softmax 函数产生每个类的概率,概率向量加 1.在预测时,具有最高 softmax 值的类成为输出或预测类。正如我们前面讨论的那样,损失函数是负对数似然函数`-l(w)`,它可以被优化器最小化,例如梯度下降。
Softmax 函数产生每个类的概率,概率向量和为 1。在预测时,具有最高 softmax 值的类成为输出或预测类。正如我们前面讨论的那样,损失函数是负对数似然函数`-l(w)`,它可以被优化器最小化,例如梯度下降。
多项逻辑回归的损失函数正式写成如下:
......@@ -781,7 +781,7 @@ X_train, X_test, y_train, y_test = skms.train_test_split(
X, y, test_size=.4, random_state=42)
```
在分类中,我们使用 sigmoid 函数来量化模型的值,使得输出值位于范围[0,1]之间。以下等式表示由`φ(z)`表示的 S函数,其中`z`是等式`w × x + b`。损失函数现在变为由`J(θ)`表示的值,其中`θ`表示参数。
在分类中,我们使用 sigmoid 函数来量化模型的值,使得输出值位于范围[0,1]之间。以下等式表示由`φ(z)`表示的 Sigmoid 函数,其中`z`是等式`w × x + b`。损失函数现在变为由`J(θ)`表示的值,其中`θ`表示参数。
![](img/af47d49d-2bb6-4e48-b6d3-4d7cd65ff6d5.png)
......@@ -880,7 +880,7 @@ num_batches = int(mnist.train.num_examples/batch_size)
上面代码中的参数如下:
* `num_outputs`:由于我们必须预测图像代表十位数中的哪一位,因此我们将输出数设置为 10.数字由打开或设置为 1 的输出表示。
* `num_inputs`:我们知道我们的输入数字是 28 x 28 像素,因此每个像素都是模型的输入。因此,我们总共有 784 个输入。
* `num_inputs`:我们知道我们的输入数字是`28 x 28`像素,因此每个像素都是模型的输入。因此,我们总共有 784 个输入。
* `learning_rate`:此参数表示梯度下降优化器算法的学习率。我们将学习率任意设定为 0.001。
* `num_epochs`:我们将仅针对一次迭代运行我们的第一个示例,因此我们将周期数设置为 1。
* `batch_size`:在现实世界中,我们可能拥有庞大的数据集并加载整个数据集以便训练模型可能是不可能的。因此,我们将输入数据分成随机选择的批次。我们将`batch_size`设置为 100 个图像,可以使用 TensorFlow 的内置算法一次选择。
......@@ -906,7 +906,7 @@ optimizer = tf.train.GradientDescentOptimizer(
learning_rate=learning_rate).minimize(loss)
```
代码类似于二分类示例,但有一个显着差异:我们使用`softmax`而不是`sigmoid`函数。 Softmax 用于多类分类,而 sigmoid 用于二元类分类。 Softmax 函数是 sigmoid 函数的推广,它将任意实数值的 n 维向量 z 转换为实数值的 n 维向量 _σ(z)_,范围`(0, 1]`和为 1。
代码类似于二分类示例,但有一个显着差异:我们使用`softmax`而不是`sigmoid`函数。 Softmax 用于多类分类,而 sigmoid 用于二元类分类。 Softmax 函数是 sigmoid 函数的推广,它将任意实数值的 n 维向量 z 转换为实数值的 n 维向量`σ(z)`,范围`(0, 1]`和为 1。
现在让我们运行模型并打印精度:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册