吴恩达course 1 作业学习

course 1 week2 具有神经网络思维的Logistic回归

  1. 定义的模块在使用前需要先实例化才能使用

train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()
index = 25
plt.imshow(train_set_x_orig[index])
  1. 对下面代码的解读:该代码为针对不同学习率情况下,不同的损失函数的描绘

这里的代码是吴恩达老师作业最后的部分,主要是对比一下不同学习率的影响。这里写进来,主要是为了解释一下代码,顺便学习一下画图使用的函数。

首先定义了3个学习率,之后将moedels实例化这里第二句是空的{}我认为是一种占位行为,告诉别人我有。之后进入for循环,打印学习率,然后是对models模型的实际定义,之后打印分隔线隔开。

之后又进入一次for循环,首先是np.squeeze的意思是从数组的形状中删除单维度条目,即把shape中为1的维度去掉,作用是将原本的多维数组变为秩为1的数组,我们可以利用squeeze()函数将表示向量的数组转换为秩为1的数组,这样利用matplotlib库函数画图时,就可以正常的显示结果了。squeeze函数里的参数是models模块里的costs,这是第9句的意思。之后y轴命名为cost x轴命名为iterations。

最后出现legend函数,这个函数有很多语法,这里loc为location为中间上方,阴影选择开启。15开启框架,16框架设置透明度为90%。最后通过plt.show()进行显示。这个是必须有的

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()

3.python中的%用法

1. 取模运算符

%代表取模,返回除法的余数。

>>> 5 % 2
1

2. 字符串格式化

表示字符串格式化操作,常用的操作有%s %d %r等。

简单的说,这是一种将其他变量置入字符串特定位置以生成新字符串的操作,比如:

n = "Aki"
"My name is %s" % n

>>> "%s %d %f"%("abc",123,3.21) #多个值
'abc 123 3.210000'

%s    字符串 (采用str()的显示)
%r    字符串 (采用repr()的显示)
%c    单个字符
%b    二进制整数
%d    十进制整数
%i    十进制整数
%o    八进制整数
%x    十六进制整数
%e    指数 (基底写为e)
%E    指数 (基底写为E)
%f    浮点数
%F    浮点数,与上相同
%g    指数(e)或浮点数 (根据显示长度)
%G    指数(E)或浮点数 (根据显示长度)
%%    字符"%"

course 1 week3 构建浅层神经网络

  1. 针对contour和scatter

解释可以如下所示,对于contour其为填充函数,主要填充分界线两端的颜色不同。xx、yy为x轴和y轴对应点的坐标,而c=z即对应的边界函数,具体的例子如下图1所示,z = np.square(xx) - yy > 0为例,其就是一个抛物线,这里的square可以理解为对向量的平方。cmap=plt.cm.Spectral即按照离分界点的远近来确定散点颜色的深浅,scatter是描绘散点的坐标图,后方的z还有cmap是类似的。

x = np.arange(-5, 5, 1)
y = np.arange(0, 20, 2)
xx, yy = np.meshgrid(x, y)

z = np.square(xx) - yy > 0
#plt.cm.Spectral,在这的意思就是颜色会随Z的值变化
plt.contourf(xx, yy, z, cmap=plt.cm.Spectral) ##这个函数是用来填充不同区域的颜色
plt.scatter(xx, yy, c=z) ##这个函数是用来绘制散点图,其中c可以理解为一种边界函数,例:大于它是蓝色,否则为红
plt.show()

图1 未使用contour函数而绘制的散点图

图2 未使用scatter函数而绘制的边界填充图

图3 二者皆使用的图像

  1. 反向传播算里的梯度下降总结

course 1 week4 构建深层神经网络

  1. 路径的使用方法

由于读取文件的代码不在主目录下,而是在子目录下,所以./Data/只能读取当前目录下的文件。

学习一下 ”/ " 、“ ./ “ 、 ”…/“的区别:

/ :表示当前路径的根路径。

./ :表示当前路径。

…/ :表示父级路径,当前路径所在的上一级路径

2.np.where的使用以及作业中观测错误标注的图片程序

np.where分为两种使用,这次代码中使用的为np.where(判断)得到的输出对应为该数值所对应的位置,本程序内因为a是一个二维数组,所以无论哪个数值对应的位置都为[0, x]所以np.where最终输出的就是一个二维数组,其中第一个arry[]为横坐标第二个arry[]为纵坐标。

def print_mislabeled_images(classes, X, y, p):
    """
    绘制预测和实际不同的图像。
        X - 数据集
        y - 实际的标签
        p - 预测
    """
    a = p + y
    mislabeled_indices = np.asarray(np.where(a == 1))
    plt.rcParams['figure.figsize'] = (40.0, 40.0) # set default size of plots
    num_images = len(mislabeled_indices[0])
    for i in range(num_images):
        index = mislabeled_indices[1][i]
        
        plt.subplot(2, num_images, i + 1)
        plt.imshow(X[:,index].reshape(64,64,3), interpolation='nearest')
        plt.axis('off')
        plt.title("Prediction: " + classes[int(p[0,index])].decode("utf-8") + " \n Class: " + classes[y[0,index]].decode("utf-8"))


print_mislabeled_images(classes, test_x, test_y, pred_test)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值