Logistic Regression with a Neural Network mindset-4

版权为吴恩达老师所有,参考Koala_Tree的博客,部分根据自己实践添加

使用google翻译,部分手工翻译

您会发现该模型显然过度拟合了训练数据。 在本课程的后期,您将学习如何减少过度拟合,例如使用正则化。 使用下面的代码(并更改索引变量),您可以查看测试集图片上的预测。

index=1
plt.imshow(test_set_x[:,index].reshape((num_px,num_px,3)))
pylab.show()

costs=np.squeeze(d["costs"])
plt.plot(costs)
plt.ylabel("cost")
plt.xlabel("iterations (per hundreds)")
plt.title("Learning rate =" + str(d["learning_rate"]))
plt.show()

解读:您可以看到costs在下降。 它表明正在学习参数。 但是,您可以看到您可以在训练集上进一步训练模型。 尝试增加上面单元格中的迭代次数,然后重新运行。 您可能会看到训练集精度上升,但测试集精度下降。 这称为过度拟合。

6 - 进一步分析(可选/未分级练习)

祝贺您构建了第一个图像分类模型。 让我们进一步分析它,并检查学习率α的可能选择。 学习率的选择提醒:为了使梯度下降工作,您必须明智地选择学习率。 学习率α决定了我们更新参数的速度。 如果学习率太大,我们可能会“超调”最佳值。 同样,如果它太小,我们将需要太多的迭代来收敛到最佳值。 这就是为什么使用良好调整的学习率至关重要。 让我们将模型的学习曲线与几种学习率选择进行比较。 运行下面的程序。 这应该需要大约1分钟。 也可以尝试使用与我们初始化的learning_rates变量包含的三个值不同的值,并查看会发生什么。

learning_rates=[0.01,0.001,0.0001]
models={}
for i in learning_rates:
    print("learning rate is: " + str(i))
    models[str(i)]=model(train_set_x,train_set_y,test_set_x,test_set_y,num_iterations=1500,learning_rate=i,print_cost=False)
    print("\n" + "------------------------------------------------" + "\n")

for i in learning_rates:
    plt.plot(np.squeeze(models[str(i)]["costs"]),label=str(models[str(i)]["learning_rate"]))

plt.ylabel("cost")
plt.xlabel("iterations")

legend=plt.legend(loc="upper center",shadow=True)
frame=legend.get_frame()
frame.set_facecolor("0.90")
plt.show()

解释:

- 不同的学习率会产生不同的成本,从而产生不同的预测结果。

- 如果学习率太大(0.01),成本可能会上下波动。 它甚至可能发散(尽管在这个例子中,使用0.01仍然最终会以很高的成本结束)。

- 较低的成本并不意味着更好的模型。 你必须检查是否有可能过度拟合。 当训练精度远高于测试精度时,就会发生这种情况。

- 在深度学习中,我们通常建议您:

- 选择更好地降低成本函数的学习率。

- 如果您的模型过度拟合,请使用其他技术来减少过度拟合。 (我们将在以后的视频中讨论这个问题。)

7 - 使用您自己的图像进行测试(可选/未分级练习)

祝贺您完成此任务。 您可以使用自己的图像并查看模型的输出。

my_image="catornotcat.jpg"

fname=my_image
image=np.array(ndimage.imread(fname,flatten=False))
my_image=scipy.misc.imresize(image,size=(num_px,num_px)).reshape((1,num_px*num_px*3)).T 
my_predicted_image=predict(d["w"],d["b"],my_image)

plt.imshow(image)
plt.show()
print("y = " + str(np.squeeze(my_predicted_image)) + ", your algorithm predicts a \"" + classes[int(np.squeeze(my_predicted_image)),].decode("utf-8") + "\" picture.")
tips:
1.将图片与代码放在同一个文件夹下
2.我找了一张图片,结果猜测错误...

从这项任务中记住什么:

1.预处理数据集很重要。

2.您分别实现了每个函数:initialize(),propagate(),optimize()。 然后你构建了一个模型()。

3.调整学习速率(这是“超参数”的一个例子)可以对算法产生很大的影响。 您将在本课程的后面看到更多这方面的例子!

tips:
1.我将实验过程中写的代码上传到了百度网盘,需要的同学可以下载
https://pan.baidu.com/s/19U2GycYM9WDLeNhpTlVhIw

猜你喜欢

转载自blog.csdn.net/smoggyxhdz/article/details/81625686