斯坦福CS230可以作为深度学习的入门课,最近我也在跟着看视频、完成编程作业。首先列出使用的资源链接,然后给出第一课的理解和编程作业的代码。

所有资料如下:

一、课程连接:

  1. b站课堂讲授版:Stanford CS230(吴恩达 深度学习 Deep Learning | Autumn 2018)(中英双字幕)
    (一共10个视频,每周一个,但是每个视频对应下面的配套视频较多)
  2. Coursera配套视频:Neural Networks and Deep Learning
    (注:内容和下面是一样的,只不过在每个讲解视频完之后多了一些小quiz,但是视频可能播放不了,需要设置root权限,嫌麻烦请转3)
  3. b站配套视频:【中文字幕】深度学习_吴恩达_DeepLearning.ai

二、官方slide和网络上其他人的笔记:

  • Syllabus(包含课程安排、讲义等)
  • 深度学习笔记目录

三、GitHub上编程作业:

  • 有quiz、没有数据
  • 没有quiz、有数据
  • CSDN上一个很不错的中文作业目录

第一课:用神经网络来看逻辑回归

  • 逻辑回归原本是广义线性模型中用于分类的一种算法,它通过一个非线性变换使得最后的输出值在[0,1][0,1][0,1]之间,这个值可以解释为给出xxx时yyy为正例的概率,即:P(y=1∣X)=σ(WTX+b)P(y=1|X)=\sigma(W^TX+b)P(y=1∣X)=σ(WTX+b)然后设定阈值,例如0.5,即可得到分类结果。
  • 从神经网络的视角来看,输入层即为XXX,线性变换WTX+bW^TX+bWTX+b得到隐层,最后经过一个sigmoid激活函数得到输出层。这是神经网络的前向传播过程(Forward Propagation)。
  • 对于这个结果的评价,使用的是对数似然损失(Log-likelihood Loss), 也称交叉熵损失(cross-entropy Loss),对于二分类的情况L(y^,y)=−1n∑i=1n[yilog⁡y^i+(1−yi)log⁡(1−y^i)]L(\hat y,y)=-{1\over n}\sum_{i=1}^n\big[y_i\log \hat y_i + (1-y_i)\log (1-\hat y_i)\big]L(y^​,y)=−n1​i=1∑n​[yi​logy^​i​+(1−yi​)log(1−y^​i​)]
  • 我们的目的是学习到整个网络的参数,也就是这里的WWW和bbb,方法是通过迭代来更新参数使得错误率最小(也就是损失函数最小)。因此需要将每次前向传播得到的结果与标签数据进行比较,得到一个损失,考察参数对这个损失的影响就要通过损失函数对参数的梯度来体现。但是这个梯度直接求导不行,因为本来这个模型就不是一个线性函数,而是一个复合函数,因此需要通过链式法则一层一层求导得到这个导数。直观上理解就是让误差从输出层传到隐层,再从隐层传到输入层,这就是误差的反向传播过程(Bcakward Propagation)。

import numpy as np
import matplotlib.pyplot as plt
import h5py
from skimage.transform import resize # 导入数据
def load_dataset():train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set featurestrain_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labelstest_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set featurestest_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labelsclasses = np.array(test_dataset["list_classes"][:]) # the list of classestrain_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes# 得到训练集和测试集
train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()# 图片展示
index = 2
plt.imshow(train_set_x_orig[index])
print ("y = " + str(train_set_y[:, index]) + ", it's a '" + classes[np.squeeze(train_set_y[:, index])].decode("utf-8") +  "' picture.")# 数据展开
train_set_x_flatten = train_set_x_orig.reshape((209,-1)).T #(12288, 209)
test_set_x_flatten = test_set_x_orig.reshape((50,-1)).T #(12288, 50)# 标准化
train_set_x = train_set_x_flatten/255
test_set_x = test_set_x_flatten/255# 定义一些重要的函数以供后面调用
def sigmoid(x):s = 1 / (1 + np.exp(-x))return sdef initalize(length_of_features):W = np.zeros((length_of_features,1))b = 0return W, bdef acc(Y, pred_Y):n = Y.shape[1]right = np.sum(Y-pred_Y==0)return right/n# Forward and backward propagation
def propagation(W, b, X, Y):n = X.shape[1]Z = np.dot(W.T, X) + bA = sigmoid(Z)cost = - np.sum(Y * np.log(A) + (1-Y) * np.log(1-A)) / ndW = (1/n) * np.dot(X, (A-Y).T)db = (1/n) * np.sum(A-Y)return dW, db, cost# 测试
w, b, X, Y = np.array([[1],[2]]), 2, np.array([[1,2],[3,4]]), np.array([[1,0]])
# propagation(w, b, X, Y)
# (array([[0.99993216],
#        [1.99980262]]),
# 0.49993523062470574,
# 6.000064773192205)# 通过迭代优化参数
def optimize(W, b, X, Y, num_iterations, learning_rate, verbose=False):costs = []for i in range(num_iterations):dW, db, cost = propagation(W, b, X, Y)W = W - learning_rate * dWb = b - learning_rate * dbcosts.append(cost)if verbose == True and i % 100 == 0:print('Cost after iteration %d: %f' %(i, cost))return W, b, costs# 测试
optimize(w, b, X, Y, num_iterations=100, learning_rate=0.009, verbose=True)
# array([[0.1124579 ],
#         [0.23106775]]),
#  1.5593049248448891,# 输出预测结果
def predict(W, b, X):prob = sigmoid(np.dot(W.T, X) + b)y_pred = np.zeros(prob.shape)for i in range(y_pred.shape[1]):if prob[0,i] > 0.5:y_pred[0,i] = 1return y_pred# predict(w, b, X)
# array([[1., 1.]])# 整合得到最终的模型,后面只需调用这个就行
def model(X_train, Y_train, X_test, Y_test, num_iterations, learning_rate, verbose=False):W, b = initalize(X_train.shape[0])W_final, b_final, costs = optimize(W, b, X_train, Y_train, num_iterations, learning_rate, verbose)pred_train_y = predict(W_final, b_final, X_train)pred_test_y = predict(W_final, b_final, X_test)print('Train accuracy:%f' %acc(Y_train, pred_train_y))print('Test accuracy:%f' %acc(Y_test, pred_test_y))output = {'costs': costs,'W': W_final,'b': b_final,'pred_train_y': pred_train_y,'pred_test_y': pred_test_y}return output# 调用,在这个训练集上训练,然后在测试集上看模型表现
d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations=2000, learning_rate=0.005, verbose=True)# 画出分类错误的样本图案
index = 46
plt.imshow(test_set_x[:,index].reshape((64,64,3)))
print("y = %d means this is a cat, but pred_y = %d" %(test_set_y[0,index],int(d['pred_test_y'][0,index])))# 画出学习曲线
plt.plot(np.squeeze(d['costs']))# 比较不同的学习率的表现
learning_rates = [0.01, 0.001, 0.005]
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, verbose = False)print ('\n' + "-------------------------------------------------------" + '\n')for i in learning_rates:plt.plot(np.squeeze(models[str(i)]["costs"]), label= str(i))plt.ylabel('cost')
plt.xlabel('iterations')legend = plt.legend(loc='upper right')
frame = legend.get_frame()
frame.set_facecolor('0.90')
plt.show()# 在自己的图片上试试效果
my_image = "myimage2.jpg"
# 读入图片数据
image = plt.imread(my_image)
plt.imshow(image)
# 调整像素大小
image = resize(image, output_shape=(64,64)).reshape((1, 64*64*3)).T
predicted_image = predict(d['W'], d["b"], image)
# 预测结果以及调整后的图片
plt.imshow(image.reshape(64,64,3))
print(predicted_image)

最后试了几个自己的图片,看看预测效果:

预测正确的:


预测错误的:

Stanford CS230深度学习(一)相关推荐

  1. Stanford CS230深度学习(二)手动搭建DNN

    这篇博客主要是对第二次课进行学习总结,并完成lecture2中要求的C1M3以及C1M4的编程作业.课程资源详见Stanford CS230深度学习(一) 由于这个课的编程作业基本上是一边给任务一边给 ...

  2. Stanford CS230深度学习(七)RNN和LSTM

    在CS230的lecture 7中主要讲了神经网络的解释性,包括: 显著性图saliency maps(计算pre-softmax分数关于输入层的梯度并可视化) 遮挡敏感性occlusion sens ...

  3. Stanford CS230深度学习(六)目标检测、人脸识别和神经风格迁移

    在CS230的lecture 6中主要吴恩达老师讲述了一些关于机器学习和深度学习的tips,用一个触发词台灯的例子教我们如何快速的解决实际中遇到的问题,这节课主要是偏思维上的了解,还是要实际问题实际分 ...

  4. Stanford CS230深度学习(五)CNN和ResNet

    本周CS230在lecture5中主要讲了一下深度学习在医疗诊断方面的应用,感觉挺有意义的,个人认为属于激励我们去学好基础知识然后进行应用的一堂课吧.coursera上主要是讲了卷积神经网络.残差网络 ...

  5. Stanford CS230深度学习(四)TensorFlow2.1

    本周CS230的课程主要是介绍了GAN相关的一些东西,但是这个需要深入了解,所以本次博客主要对coursera上的课程以及作业进行总结. 目录 一.一些重要的概念 1.深度学习中的超参数 2.Batc ...

  6. Stanford CS230深度学习(八)词嵌入与文本情感分析

    在CS230的lecture 8中主要吴恩达老师如何阅读文献,以及一些职业建议,都是一些比较实用的建议和指导. 关于阅读文献,吴恩达老师提倡先列出一个这个领域的文献列表,可能只包含几篇文章,然后精读其 ...

  7. Stanford CS230深度学习(三)调参、正则化和优化算法

    lecture3中主要讲了如何构建一个ML/DL任务,主要包括:选择问题.获得数据.设计模型.训练模型.测试模型.部署以及维护.然后coursera中的课程主要讲实际的应用例如调参.正则化等,以及几个 ...

  8. Stanford CS230深度学习(九)注意力机制和语音识别

    在CS230的lecture 9中主要讲了深度强化学习(Deep Reinforcement Learning)大体上是如何实施的,以及一些应用场景.课后coursera上遗留的最后C5M3的课程及其 ...

  9. ​【斯坦福出品】吴恩达CS230深度学习课小抄来了 | 附下载

    这份人气深度学习秘籍,涵盖了吴恩达老师斯坦福大学CS230深度学习课程重点, 篇幅短 & 内容精简.并配备大量高清插图,不怕你看不下去,就怕看得停不下来.目前,清单地址已经公开,还有PDF版可 ...

最新文章

  1. 【项目实践】基于Mask R-CNN的道路物体检测与分割(从数据集制作到视频测试)...
  2. ZigBee TI ZStack CC2530 3.18 串口01-发送
  3. boost::gregorian模块实现计算今年的元旦直到下一个元旦的日子的测试程序
  4. [js] innerHTML与outerHTML有什么区别?
  5. js 数据结构中邻接矩阵的图的直观表示
  6. 深度学习入门:10门免费线上课程推荐
  7. Linux下替换文本内容(sed命令)
  8. 错误empty character constant的解决办法
  9. 狂神说Linux03:Vim使用及账号用户管理
  10. vim菜单栏不正常显示以及隐藏菜单栏
  11. HTML免费在线文档批量翻译工具
  12. 电子科技大学格拉斯哥学院基础实践————寝室情况及存在问题
  13. 个性篮球队名_你的篮球个性是什么
  14. 向六种植物学习创业的真谛
  15. 谷歌账户暂停三个月重新启用,谷歌账户暂停三个月重新启用,转化目标是否有效?
  16. 看清大厂面目:美光宣布暂停向华为供货!
  17. 北斗二代接收模块预研报告
  18. LEARN_前端进阶_深浅拷贝原理
  19. Cesiumjs(一)原生cesiumjs集成进入vue框架
  20. DACE- a matlab Kriging toolbox

热门文章

  1. 多个苏宁快递的物流情况是怎么批量查询的
  2. linux centos7 hadoop2.7.7HA集群搭建
  3. iOS开发 System Sound Services(振动和提示音)
  4. ――给中国青年学生的第三封信
  5. c语言图书信息图书馆销售系统,C语言图书销售管理系统.doc
  6. CSDN 有人通过用户推荐关注了你 到底是什么意思?
  7. layui富文本编辑器layedit增加上传视频与音频功能
  8. 2020年电力电缆考试技巧及电力电缆作业考试题库
  9. matlab做干涉,matlab模拟干涉衍射 | 学步园
  10. 稳定 安全 无捆绑装机员系统下载合集最新10月版