course 1 week2 具有神经网络思维的Logistic回归
定义的模块在使用前需要先实例化才能使用
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])
对下面代码的解读:该代码为针对不同学习率情况下,不同的损失函数的描绘
这里的代码是吴恩达老师作业最后的部分,主要是对比一下不同学习率的影响。这里写进来,主要是为了解释一下代码,顺便学习一下画图使用的函数。
首先定义了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 构建浅层神经网络
针对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 二者皆使用的图像
反向传播算里的梯度下降总结
course 1 week4 构建深层神经网络
路径的使用方法
由于读取文件的代码不在主目录下,而是在子目录下,所以./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)