I 两道编程题:(1)有一段楼梯台阶有50级台阶,一个人一步最多只能跨3级,登上这段楼梯有多少种不同的走法?
(2)输入一串字符串,输出其中最长的对称字串长度。
II 类别不均衡问题:
解决方法:1.增加数据:增加小样本的数量,也可以丢弃一部分大样本的数据(对大数据进行欠采样)来解决。
2.尝试其他的评价指标:混淆矩阵,精确率,召回率,F1得分,ROC曲线。
3.对数据集进行重采样,主要有两种方式:(1)对小类数据样本进行采样增加小类的数据样本个数,即过采样(采样的个数要大于该类样本的个数)。(2)对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(采样的次数少于该类样本的个数)。对大类下的样本进行欠采样,删除部分样本。小类下的样本进行过采样,即添加部分样本的副本。考虑随机采样与非随机采样两种采样方法。可以考虑同时使用过采样,欠采样。
4.人工样本数据产生的方法:对该类别下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,属性值随机采样。
5.对模型进行惩罚:对于识别小类任务,对分类器的小类样本数据增加权值,降低大类样本的权值。
III hard negative mining
答:loss较大的样本即易将负样本看作正样本的那些样本,如果roi无物体,全是背景,分类器易分类为正确的背景。roi中有二分之一的物体,标签仍为负样本,则分类器易将其看成正样本,即hard negative。hard negative mining 多找一些hard negative 加入负样本集,进行训练。
IV NMS原理
答:剔除重复的框,将提取的矩形框的分数按从小到大的顺序排列。将最大的框挑选出来,将剩余的框与其IOU进行比较,大于某个阈值的扔掉,接着从剩下框中再挑选一个框作为标准,重复至只剩下保留下来的矩阵。
V BN层的作用及一般放在哪里?
随着网络的训练,数据的分布会发生变化,BN层用于调整数据分布为正态分布,防止梯度弥散。
答:(1)加速收敛(2)控制过拟合(3)少用或者不用Dropout和正则化(3)降低网络对初始化权重的不敏感性。(4)允许较大的学习率。
BN层存放位置:weights - > batchnorm->activation->weights->batchnorm->activation->dropout,可以利用不同激活函数的区间实现不同的非线性效果。
VI Linux如何设置环境变量?
临时:直接用 export PATH=$PATH:/home/可执行文件路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: ~/依赖库的路径
export TESTDATA_PREFIX=/home/依赖的训练数据所在的文件
查看是否设置好了: #export 或者#echo $PATH
在sh脚本中的设置 #! /bin/sh
export PATH=$PATH:/home/可执行文件路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: ~/依赖库的路径
export TESTDATA_PREFIX=/home/依赖的训练数据所在的文件
永久设置:
修改~/.bashrc文件
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: ~/依赖库的路径
永久设置方法一般需要重新注销系统才可以生效,注销登陆后,可以通过echo,命令测试。
设置,取消
1 查看当前用户本地shell设置的所有变量
#set
2 用unset 取消变量的设置
#unset $LD_LIBRARY_PATH:
VII python中* args用与将参数打包成tuple给函数体调用
**kwargs打包关键字参数成dict给函数体调用
VIII tensorflow中程序跑着跑着内存会增加导致程序忽然崩掉,原因,解决方法?
tensorflow 代码几乎都采用循环,在循环中使用到了tf的op操作,会导致节点越来越多,图的大小不停的增大,故而内存会持续增长。
常见集中形况
1.sess.run(a+b) 最好写成sess.run(add_a_b)
2.tf.train.Saver()保存模型时,不要直接写tf.train.Saver().save/restore().这样也会导致内存持续增长,可能tf.train.Saver()增加了图节点。
其余情况可以在循环开始除使用sess.graph.finalize()代码,如果循环中有导致节点增加的代码,程序会增加。
动态分配内存:config=tf.ConfigProto()
congfig.gpu_options.allow_growth=True
sess=tf.Session(config=config)
设置GPU内存使用率
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
执行训练脚本时使用CUDA_VISIBLE_DEVICES=1来限制使用GPU
IX tensorflow 中的模型文件
checkpoint model.ckpt-200.data-00000-of-00001
model.ckpt-200.index
model.ckpt-200.meta
其中,model.ckpt-200.meta保存的是图结构,即神经网络的网络结构。因此可以只保存一次就行,saver.save(sess, 'my-model', global_step=step,write_meta_graph=False)
并且还可以使用tf.train.import_meta_graph(‘model.ckpt-200.meta’)能够导入图结构。
model.ckpt-200.data-00000-of-00001为data文件,保存网络的权重,偏置,操作等等。
model.ckpt-200.index是一个不可变得字符串表,每一个键都是张量的名称,它的值是一个序列化的BundleEntryProto。 每个BundleEntryProto描述张量的元数据:“数据”文件中的哪个文件包含张量的内容,该文件的偏移量,校验和,一些辅助数据等等。
X 正则化
机器学习的目标:特定任务上表现良好的算法:泛化能力强,训练集上的误差不大即可。
正则化是指修改学习算法,使其降低泛化误差而非训练误差。
L2正则化向目标函数中添加一个正则项0.5*w^2使权重衰减,权重更加接近原点。L2也成为岭回归,L1正则化为||W1||,即各个参数的绝对值之和,L1正则化会产生更稀疏的解,指最优值中的一些参数为0,L1的稀疏性被广泛的用于特征选择,LASSO将L1惩罚与线性模型进行结合,并使用最小二乘代价函数。作为约束的范数惩罚。
数据增强,引入噪声鲁棒性,多任务学习,提前终止,参数绑定和参数共享,稀疏表示,集成,dropout等。