Giter Site home page Giter Site logo

dailyworklog's People

Contributors

narcissusinmirror avatar

Watchers

 avatar

dailyworklog's Issues

Pytorch学习笔记

torch.nn.Parameter

Parameter类是Tensor的子类,是一个模型内可以进行梯度更新的参数,可通过model.parameters()进行迭代,

for param in model.parameters():
    print(type(param.data), param.size(), param.names)

在优化器中会指定这些参数

optimizer = optim.SGD(model.parameters(), lr=0.0001, momentum=0.9)

因此,如果只是定义了tensor,没有加到模型的parameter里面,这些tensor是无法被训练的,即使requires_grad设置为了True,因此需要用Parametertensor进行包装。以下的代码写在模块的__init__函数下,会自动认为加入到当前模块中

class ResnetAttention(nn.Module):
    def __init__(self, model, num_classes):
        super(ResnetAttention, self).__init__()
        ...
        self.w1 = nn.Parameter(torch.tensor([1.]), requires_grad=True)
        self.w2 = nn.Parameter(torch.tensor([1.]), requires_grad=True)
        self.w3 = nn.Parameter(torch.tensor([1.]), requires_grad=True)
       ...
#注意!这里后面不能加上.cuda(),否则会从parameter退回tensor,模块会默认把所有参数放到gpu上

下面的代码是在模块中加入parameter的另一种方法,name参数传入字符串,可以通过这个名字来访问该parameterparam参数则是需要加入模块的parmameter,注意,必须是parametertensor不行,这里可能是用来加入到其他模块中?

self.register_parameter(param=self.w1, name='aaa')
self.register_parameter(name='bbb', param=self.w2)
self.register_parameter(name='ccc', param=self.w3)

吴恩达机器学习课程笔记

P10

  • 关于学习率的直觉:

P11线性回归的梯度下降

  • 线性回归的loss function是凸函数,没有局部最优解,只有全局最优解。Screenshot 2019-04-27 at 16 58 46

P14矩阵和向量

  • 向量:n*1 n行,1列

P15

  • 代表第i个样本的第j个特征的取值

P17矩阵的逆和转置

  • 不可逆矩阵成为奇异矩阵(singular matrix)或退化矩阵(degenerate matrix)

P22 特征和多项回归

  • 如果想用多项式拟合数据,可以选择的方法是将特征的若干次幂作为新特征,再进行线性回归。这里要注意特征的缩放。
    Screenshot 2019-04-29 at 11 18 44

P23 Normal Equation正规方程

  • 在线性回归中,可以使用正规方程直接算出使损失函数最小的参数值,而梯度下降法则需要自己设定学习率并且经过若干迭代才能最小化损失函数
    Screenshot 2019-04-29 at 11 39 29
  • 当特征数目少于10000时正规方程是不错的选择,但当特征数目大于这个数目时,计算会变得非常慢。
  • 在其他的算法问题中,正规方程也是不适用的
  • 一组数据用一个列向量表示……列向量转置……
    Screenshot 2019-04-29 at 11 40 58

P24 正规方程中矩阵不可逆

  • Screenshot 2019-04-29 at 11 46 00

Logistic Regression

P32 分类问题

  • logistic regression 虽然是叫regression但是个分类算法。(分类问题&回归问题)

P33 假设陈述

  • sigmoid function = logistics function
    Screenshot 2019-04-29 at 14 28 58

P34 决策边界 Decision Boundary

P35 Cost Function (其实就是交叉熵)

  • 如果做logistic regression仍使用线性回归的cost function,则cost function是一个非凸函数(如下图左),有很多局部最优解,这一现象是由sigmoid函数的非线性导致的,因此需要修改cost function
    Screenshot 2019-04-29 at 15 26 20
  • cost function的选取如下,是一个分段函数。y=1时(即真实标签为1),如果判断出的结果为0,则会导致损失函数非常大(正无穷);同样的,y=0时如果判断结果为1也会使loss值很大,从而达到损失函数的目的
    Screenshot 2019-04-29 at 15 29 04
    Screenshot 2019-04-29 at 15 32 44

P38 多元分类:一对多

  • 思路是训练n个一对多的分类器,预测时将样本送进n个分类其中,选择使最大的分类器
    Screenshot 2019-04-29 at 18 23 27

正则化 Regularization 在另一个issue也提到了这个问题

P39 Overfitting

  • Linear Regression & Logistic Regression(classification)直观区别
    Screenshot 2019-04-29 at 18 57 19Screenshot 2019-04-29 at 18 57 55

P40 Cost Function

  • 直观上说,增加更多的高阶项(即增加了更多的参数theta)可以让决策边界更加弯曲(这里的高阶项是现有feature若干次幂的组合,比如数据有两个特征x1和x2,高阶项可能是x1^2, x2^2, x1x2, x1x2^2...,因此数据可以用P39中两个坐标轴组成的坐标系表示),因此解决这一问题的**就是减小相应的theta值。一般采用的方法就是在loss function添加正则项,这个正则项其实就是所有参数的平方和,这样一来就可以在减小loss function的同时减小theta了
    Screenshot 2019-04-29 at 18 42 46

Advice for applying machine learning

diagnosing bias & variance

Screenshot 2019-05-14 at 09 50 42

  • 出现bias问题对应着underfitting,variance问题对应着overfitting
  • 这里的高bias问题对应着拟合多项式的次数过低,即欠拟合;高variance对应着拟合多项式的次数过高,即过拟合。对应到训练结果上就是验证集的损失高+训练集的损失高就是欠拟合,验证集的损失高+训练集的损失低对应过拟合。

regularization and bias & variance

learning curve

Screenshot 2019-05-14 at 10 17 16
当处于high bias时,增加数据样本对于提升模型性能是没有用的,如上图右侧所示
Screenshot 2019-05-14 at 10 24 11
high variance的特点是验证集的loss和测试集的loss相差较大,此时增加训练样本对是有用的

deciding what to do next

Screenshot 2019-05-14 at 10 33 39

Machine learning system design

Error analysis

Screenshot 2019-05-14 at 10 33 39

Screenshot 2019-05-14 at 11 28 16

SVM

SVM参数选择
Screenshot 2019-05-14 at 19 24 26

问题链接合集

问题链接合集

* Mac桌面不显示东西

* https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

$ setsid python a.py > a.txt &
此条命令创建父进程为1的进程,不会因为ssh中断而中断,并将输出重定向至a.txt中,&将命令放在后台运行,并返回一个进程ID。值得注意的是,此条命令下返回的id用ps -ef|grep 无法找到,需将ID+1才是真正的进程ID 原因未知.

2019春季学期-3月&4月

2019.3.21工作日志

  • 上午主要在考虑如何在退出ssh连接后不使运行的进程终止
    • 之所以在ssh连接断开后无法进程会终止,是因为所有在ssh上运行的命令其父进程都是此ssh,一旦ssh退出,父进程下的所有子进程都会被杀死。解决方法见如下网站:Linux 技巧:让进程在后台可靠运行的几种方法
    • 总结出的命令:$ setsid python a.py > a.txt &,其中setsid使得命令的父进程id为1,并将输出重定向至a.txt,&则使命令在后台运行,同时会返回一个进程ID。值得注意的是,此条命令下返回的id用$ps -ef|grep 无法找到,需将ID+1才是真正的进程ID,原因未知.
  • 下午主要在研究numpy,实践证明,numpy可以大幅提高计算速度,可见其已经做过不错的优化。
    • numpy有一个非常重要的功能,mask array,可以生成array的mask,对其余的mask进行相应操作,以下是一个例子
>>> a = np.ma.array([1,2,3], mask=[False, False, True])
>>> a
masked_array(data = [1 2 --],
             mask = [False False  True],
       fill_value = 999999)
>>> a.mean()
1.5
  • 下午主要试验用数组本身来定义mask,有如下语句:
    masked_array = np.ma.array(imageArray, mask=(imageArray==0))
    这行代码为imageArray构建mask,mask的位置是数组内所有值为0的位置,这些位置被置位True,代表会被mask。这里的应用场景是计算图片内除了黑色部分的均值,代码如下mean_value = masked_array.mean()
  • 同时,修改numpy数组可以用如下的方式,十分便捷
    imageArray[imageArray < mean_value] = 0
  • python中,如果定义了a = [1, 2, 3],又定义了b = a,无论修改b还是a都会改变[1, 2, 3]

船牌数据收集

船牌数据集采集记录

日期 已标注/筛选数量 备注 星期
9.1 0/69 全天 周二
9.2 0/88 上午 + 五点后
9.3 0/45 凌晨 + 2:30以后 上午摄像头掉线
9.4 0/147 全天
9.5 0/85 全天
9.6 0/0 集群掉电
9.7 0/0 集群掉电 周一
9.8 0/0 集群掉电,网络故障,收集到十分钟的
9.9 0/107 10点后
9.10 0/101 全天;一共有3500多张图 大部分都是固定场景下的误检
9.11 0/166 全天;对比了YOLOv5和SSD半天的性能,YOLOv5 56张,SSD49张
9.12 全天
9.13 全天
9.14 全天 周一
9.15 0/167 至下午4:30 网络中断;对比了YOLOv5和SSD全天(至下午4:30)的性能,YOLOv5 167张,SSD135张 周一

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.