【Star Pro】T-2019.09.28~2019.10.03学习记录

20190928
接收了Findlab老师师兄发的材料后,先大致浏览了一遍,然后根据文档中要求先安装完成了python 3.7和jupyter notebook.
在这里插入图片描述
在这里插入图片描述
然后大致制定了学习计划:第一周时间每天同时学习python基本语法(廖雪峰)以及观看吴恩达 Andraw Ng的神经网络和深度学习课程。

= =20190929= =
python语法笔记:
1、命令窗口下,交互式命令一行一运行;编译python文件 用“python +文件名.py”命令。
2、输入 :input()
可将输入内容直接赋值给变量如 a=input()
可在input括号内加入提示语如 name=input(‘请输入你的名字’)
输出:print()
需输出字符或字符串括号内加‘’,否则直接括号内加变量。
3、python中注释为#符号
4、数据类型与c语言相通:整数、浮点数、布尔类型,字符串,以及字符串中转义字符 \ ,字符串内占位符%的使用。可使用r‘ ’默认取消转义
python允许用(‘‘‘ ’’’)表示多行内容
在这里插入图片描述
交互式界面输入时先打一边括号与’’‘回车即可换行。 最后输入’’’+)回车即可结束输入并编译。
在这里插入图片描述
同理可加r取消换行用法
5、python作为动态语言(不同于c静态语言),可将任意数据类型赋给同一变量。可把任意变量都看成对象,变量赋值即将值与该对象关联。
6、字符编码:
c中使用ASIIC码:一个字节。(可能无法编码汉字)
Unicode码:通常2字节。(编码英文字母时浪费)
UTF-8编码:可根据不同情况分1-6字节
python采用Unicode编码,且提供:
ord()函数得出字符的编码
chr()函数将编码转为字符
encode():转编码
decode():与之相对。
len():计算str长度。

神经网络和深度学习:
1、神经网络分类:
卷积神经网络CNN
标准神经网络SNNM
循环神经网络RNN以及其他组合神经网络等
2、数据分类:
结构化数据:如数据库,可分门别类排列的数据
非结构化数据:如音频、视频图像,文字,依靠不规则的像素来识别。
3、深度学习在如今大数据时代下相比传统算法具有优势。
过程:提出想法->编程实现->实验验证->更新改变想法->编程实现。。。。。。(循环)
4、一张彩图在计算机上为红绿蓝三层组成,可以每层上每个点的亮度来代表图的信息,即可用三个矩阵代表一张图的信息。
5、最简单的神经网络即一个输入后得出一个输出,个人理解神经网络类似于一个函数,对输入运行算法从而得到输出(0或1)。较复杂神经网络即有多个输入而得到输出。
6.对于二分分类及logistic回归,一开始不理解y=w^T+b的含义由来,后查找资料在

https://blog.csdn.net/bitcarmanlee/article/details/51154481

这里找到了答案:将样本数据比为空间中的点,那么二分即是做出或规定一个面(平面/曲面/不规则面等)来将数据分割开,即输出0或1。而y=w^T+b即是该面的函数。
而logistic函数的意义在于传统分类法具有跳跃性,处理数据时不够合理,logistic具有较好的连续性,且通过概率表示输出。在这里插入图片描述

----20190930----

python语法
1、python数据类型中list【】列表类型,类似c语言中数组,但比数组更灵活。
listname【-1】表示列表中最后一个,-2、-3同理。
listname.append(元素)给列表最后插入元素
listname.insert(number,元素)在列表指定位置插入元素
listname.pop(i)删除列表中第i位元素
list中元素可为list【】,其他规则与c中数组相同;
tuple元组:不可变数组,()定义时就得确定元素
定义空tuple:tuplename=();
定义一元素tuple:tuplename=(元素,);
在这里插入图片描述

练习
2、条件语句;
格式if+条件+:
缩进的则为if内内容,否则不在if内;
在这里插入图片描述

在这里插入图片描述

3、python循环
for x in 循环:就是把每个元素代入变量x,然后执行缩进块的语句。
range(x)函数,提供从1到小于x的整数序列,可再通过list()转化为列表。
while循环:只要条件满足,就不断循环,条件不满足时退出循环。
break,continue用法同C。
在这里插入图片描述
4、dict使用
将两个list链接,定义:dictname={‘key’:value,。。。}
读取时 dictname【‘key’】即可。
验证value的key是否存在
一是value in dictname;二是dictname.get(value)
删除key:dictname.pop(key)
list、dict是时间与空间追求的相反者。
5、set的使用
set也是一组key的集合,但不存储value。里面元素不重复。
添加 set.add()
删除set.remove()
6、不可变对象
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

深度学习和神经网络
1、复习了logistic回归,在这里插入图片描述
logistic回归中,采用损失函数(损失函数越小,代表模型越好)在这里插入图片描述
来衡量单个样本的训练表现。该函数中,当y接近于1时,为了损失函数尽可能小,将调整y-hat接近于1;同理y接近0时,将调整y-hat接近于0,满足损失函数作用。

而采用成本函数在这里插入图片描述来衡量在整体训练样本上的表现。得出基于参数w和b的训练总成本。
在训练时,需要我们找到合适的w和b参数,来使损失函数与成本函数尽可能小。
2、梯度下降法
成本函数J是一个凸函数,只有一个局部最优解。在这里插入图片描述
由于是凸函数,故可在任意点进行初始化,最后均可收敛到最优处。
更新w的方法 w:=w-αdJ(w,b)/dw(初始点处的斜率即下降最快方向),若在低点后方,斜率为正,即w将减去一正数,w值变小;若w在低点前方,斜率为负,w减去一负数w值变大,重复以上步骤,将使w达低点所在值。
同理更新b的方法 b:=b-α*dJ(w,b)/db。(符号d即微积分中偏导符号)这便是梯度下降法训练原理。

= = 2019.10.01= =
python语法:
1、通过函数减少重复工作
2、abs()绝对值函数,max()最大值函数等基本函数使用可在
http://docs.python.org/3/library/functions.html#abs查询。
3、转换函数,如int()、hex()。
4、定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。可用pass定义空函数,起占位作用。
在这里插入图片描述
在这里插入图片描述
6、定义默认参数要牢记一点:默认参数必须指向不变对象!(可借用None此不变变量来实现)。
7、定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个号。
8、可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
9、关键字参数可扩充函数功能,如传入可选其他数据。
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个
作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数。

深度学习和神经网络:
1、复习了微积分中求导的知识,以及神经网络中正向传输与反向传输。在这里插入图片描述2、学习了m个样本的梯度下降,即通过for循环不断更新w与b的值。
3、在大数据训练中,对运行速度有较高要求,因此对算法具有要求,而深度学习算法中,对时间影响较大的便是向量化这一步
如图在jupyter notebook跟着视频练习验证了这一现象:在这里插入图片描述
因此,在深度学习中,只要有可能,就要避免显式for循环,从而减少时间。
python的numpy中有许多内置函数,可去掉显式for循环实现向量化,如exp()实现逐个元素指数化,log()对每个元素求log运算,abs()对每个元素求绝对值,maximum遍历所有元素求最大值。

= =2019.10.02= =
python基础:

1、在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
(为了程序可读性,一般不采用多种组合)
2、递归函数的使用,阶乘/汉诺塔等问题,注意栈不要溢出,采用尾递归可避免此问题。

深度学习和神经网络:
1、对之前所学感觉有点乱,复习整理了一下思路,并查找相关文章进行对照。https://blog.csdn.net/bitcarmanlee/article/details/51473567

2、通过多个向量化的例子理解了向量化的操作
3、复习了矩阵乘法
4、学习在logistic回归中使用向量化将数据转化
通过X、Z、A大矩阵实现,初步接触python中广播的概念。在这里插入图片描述
= =2019.10.03= =
深度学习和神经网络:
1、发现自己矩阵等方面数学知识不足,因此进行稍微复习。
https://www.bilibili.com/video/av68703753?from=search&seid=6361501598816211103
2、学习了通过python代码实现矩阵运算的方法。
如python中numpy库中
np.array()构造矩阵;
矩阵.sum(axis=0)纵向求和/axis=1横向求和
reshape()确保矩阵形状

在这里插入图片描述
以及python中广播实现矩阵加减的原理。

在这里插入图片描述
构建矩阵时采用np.random,randm(m,n)构建m*n的矩阵,而避免构建秩为1的数组,否则python可能会得到非预期结果。
也可使用assert()确定矩阵的大小。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

檀蒜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值