<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小M同学的博客]]></title><description><![CDATA[深度学习，码农常用技能]]></description><link>https://blog.youkuaiyun.com/m00102981</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m00102981]]></copyright><item><title><![CDATA[尾调用、尾递归 与 非尾递归]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/109176451</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/109176451</guid><author>m00102981</author><pubDate>Tue, 20 Oct 2020 10:40:27 +0800</pubDate><description><![CDATA[尾调用、尾递归、非尾递归的几个概念及非尾递归是否可以转换为尾递归。
1、 尾调用：

tail call指的是一个函数的最后一条语句也是一个返回调用函数的语句，即return的是一个函数，这个函数可以是另一个函数，也可以是自身函数。

def fun_b(x):
  x = x -1
  return x

def function_a(x):
  x = x + 1
  return fun_b(x) # 最返回的是函数
2、尾递归：

函数在return的时候调用自身，这种情况称为尾递归，除了调用自身不]]></description><category></category></item><item><title><![CDATA[mac下ssh连接docker的方法]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/108997211</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/108997211</guid><author>m00102981</author><pubDate>Sat, 10 Oct 2020 14:58:16 +0800</pubDate><description><![CDATA[1、进入docker中的linux需要安装ssh服务
apt-get update
apt-get install openssh-server openssh-client2、设置docker的root登录权限为yes
修改/etc/ssh/sshd_config文件，找到PermitRootLogin，参数修改为yes
vim /etc/ssh/sshd_config3、修改docker的root密码
使用passwd root命令修改root登录密码
passwd root4、确认docker中密匙是]]></description><category></category></item><item><title><![CDATA[python定义一个用户可自定义成员的结构体]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/108980351</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/108980351</guid><author>m00102981</author><pubDate>Fri, 09 Oct 2020 15:58:14 +0800</pubDate><description><![CDATA[结构体通常用于保存 抽象对象的属性信息，主要用户单纯存贮信息，而不需要function，如下举例，学生的信息可以定义这么一个结构体在承载，访问和新增新的属性都可以直接通过点符号进行操作。
# 结构定义，继承dict来提供功能
class Student(dict):

    def __getattr__(self, key):
        return self[key]

    def __setattr__(self, key, value):
        self[key] = valu]]></description><category></category></item><item><title><![CDATA[安装tclsh]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/108979664</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/108979664</guid><author>m00102981</author><pubDate>Fri, 09 Oct 2020 15:33:30 +0800</pubDate><description><![CDATA[源码安装tclsh方法


下载源码
到 http://www.tcl.tk/software/tcltk/downloadnow85.html 下载 tcl8.5.19-src.tar.gz解压 tar -xzvf tcl8.5.19-src.tar.gz，比如下载放在了tmp目录



解压安装
如下，安装到&#39;usr/tcl&#39;目录下
cd /tmp
tar -xzvf tcl8.5.19-src.tar.gz
cd /tmp/tcl8.5.8/unix
./configure --pre]]></description><category></category></item><item><title><![CDATA[深度学习之物体检测]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/108870348</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/108870348</guid><author>m00102981</author><pubDate>Tue, 29 Sep 2020 16:05:11 +0800</pubDate><description><![CDATA[在给定图像或者视频中找出其中所有目标的位置，并返回每个目标的具体类别和位置信息。图片中可能有一个目标或几个目标，关于物体检测，目前深度学习网络的优势很明显，也是当前的热门应用。

...]]></description><category></category></item><item><title><![CDATA[PYTHON两种判断关键字key是否在字典Dict中的方法]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/107716684</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/107716684</guid><author>m00102981</author><pubDate>Fri, 31 Jul 2020 16:41:04 +0800</pubDate><description><![CDATA[PYTHON两种判断关键字key是否在字典中的方法

用关键字‘in’可以判断key是否在字典dict中
如果以上方法失效，这个办法肯定行，使用字典内部函数contains(关键)来判断


]]></description><category></category></item><item><title><![CDATA[numpy中的字典排序sorted，判断整个矩阵值x.all()，查找元素坐标np.argwhere]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/107707616</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/107707616</guid><author>m00102981</author><pubDate>Fri, 31 Jul 2020 10:20:29 +0800</pubDate><description><![CDATA[numpy 的all()接口判断某个矩阵是否全为某个值
&gt;&gt;&gt; a[1]
array([[0., 0., 0.],
       [0., 0., 0.]])
&gt;&gt;&gt; 
&gt;&gt;&gt; 
&gt;&gt;&gt; if a[0].all()==0:
...   print(a[0])

排序命令sorted
&gt;&gt;&gt; x={}
&gt;&gt;&gt; x[&#39;a&#39;]=99
&gt;&gt;&gt; x[&#39;b&#39;]=6]]></description><category></category></item><item><title><![CDATA[python定义一个用户可自定义成员的结构体]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/107482221</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/107482221</guid><author>m00102981</author><pubDate>Tue, 21 Jul 2020 10:09:36 +0800</pubDate><description><![CDATA[结构体通常用于保存 抽象对象的属性信息，主要用户单纯存贮信息，而不需要function，如下举例，学生的信息可以定义这么一个结构体在承载，访问和新增新的属性都可以直接通过点符号进行操作。
# 结构定义，继承dict来提供功能
class Student(dict):

    def __getattr__(self, key):
        return self[key]

    def __setattr__(self, key, value):
        self[key] = valu]]></description><category></category></item><item><title><![CDATA[【shell 脚本】批量kill进程]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/107199311</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/107199311</guid><author>m00102981</author><pubDate>Wed, 08 Jul 2020 10:15:42 +0800</pubDate><description><![CDATA[平时做深度学习训练任务的时候，经常需要批量启动多进程同时训练，最麻烦的就是任务刚启动就发现有一些配置参数没有配置好，需要修改配置再重新起任务。于是，如果有一个批量上次指定名字的脚本就方便多了，一键就能搞定多个进程的删除。
做些了一个可以批量删除的命令，可以在linux下执行，只需要指定需要删除的任务名称即可。原理是通过ps命令通过grep关键字找到对应的进程ID，然后执行kill删除进程。
任务名怎么获取，可以用这个命令，查看

ps ux


如下例子，删除当前运行的所有python进程
ps ux | ]]></description><category></category></item><item><title><![CDATA[python函数参数中添加默认值]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/107164253</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/107164253</guid><author>m00102981</author><pubDate>Mon, 06 Jul 2020 17:48:26 +0800</pubDate><description><![CDATA[python语言和C++一样，支持函数定义的时候带有默认值。但是，携带默认值的参数，都需要放在函数参数的后面，否则调用的时候会报错，提示没有默认值的参数没有赋值。
python语言，利用星号（*）可以设计一个默认值位于中间位置的默认值，主要是利用python支持通过制定参数名称的特性。
例如：

&quot;&quot;&quot;



def fun(a,b,c):
...   print(a, b, c)
... 
fun(1,2,3)
1 2 3
def fun_with_default_value]]></description><category></category></item><item><title><![CDATA[python  编程规范的一些要点]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106791021</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106791021</guid><author>m00102981</author><pubDate>Tue, 16 Jun 2020 17:04:18 +0800</pubDate><description><![CDATA[python  编程规范的一些要点：

字典读，使用dict_name.get(key)类型方法
函数参数传递了实例，则函数内需要使用isinstance进行参数检测，不要使用type
不要在finally中使用return或break语句
函数参数是可变参数时，不要使用默认值，在定义是使用None
list成员个数确定的时候，尽量在创建list的时候就指定空间长度，如members = [None]x100
在成员个数及内容不变的场景，尽量使用tuple代替list
对于频繁使用外部文件对象，尽量使用局部]]></description><category></category></item><item><title><![CDATA[python函数参数中独立星号*的作用]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106737605</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106737605</guid><author>m00102981</author><pubDate>Sat, 13 Jun 2020 20:29:50 +0800</pubDate><description><![CDATA[python函数中间有一个（）分隔，星号后面为*命名关键字参数，星号本身不是参数**。命名关键字参数，在函数调用时必须带参数名字进行调用。如下例子：

]]></description><category></category></item><item><title><![CDATA[linux下find命令和xargs的组合使用]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106670377</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106670377</guid><author>m00102981</author><pubDate>Wed, 10 Jun 2020 16:49:33 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[pytorch模型剪枝学习笔记]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106479957</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106479957</guid><author>m00102981</author><pubDate>Mon, 01 Jun 2020 19:14:00 +0800</pubDate><description><![CDATA[pytorch代码仓库
pytorch在19年11月份的时候合入了这部分剪枝的代码。pytorch提供一些直接可用的api，用户只需要传入需要剪枝的module实例和需要剪枝的参数名字，系统自动帮助完成剪枝操作，看起来接口挺简单。比如 def random_structured(module, name, amount, dim)
pytorch支持的几种类型的剪枝策略：

详细分析

pytorch提供了一个剪枝的抽象基类‘‘class BasePruningMethod(ABC)’，所有剪枝策略都需要继]]></description><category></category></item><item><title><![CDATA[AI的应用有哪些]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106135740</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106135740</guid><author>m00102981</author><pubDate>Fri, 15 May 2020 10:08:47 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[网络模型小型化--量化]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106116622</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106116622</guid><author>m00102981</author><pubDate>Thu, 14 May 2020 11:38:43 +0800</pubDate><description><![CDATA[网络模型量化
模型量化
以更少位数的数据类型用于近似表示32位有限范围浮点型数据的过程
模型的输入输出依然是浮点型
达到减少模型尺寸大小、减少模型内存消耗及加快模型推理速度等目标
原理

模型量化桥接了定点与浮点，建立了一种有效的数据映射关系，使得以较小的精度损失代价获得了较好的收益
由浮点到定点的量化
由定点到浮点反量化

优缺点
好处

减小模型尺寸，如8位整型量化可减少75%的模型大小
减少存储空间，在边缘侧存储空间不足时更具有意义
易于在线升级，模型更小意味着更加容易传输
减少内存耗用，更小的模型大]]></description><category></category></item><item><title><![CDATA[预训练模型&迁移学习]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106057961</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106057961</guid><author>m00102981</author><pubDate>Mon, 11 May 2020 17:01:31 +0800</pubDate><description><![CDATA[预训练模型&amp;迁移学习
预训练模型概念
预训练模型是一个已经训练好的保存下来的网络
该网络之前在一个大型的数据集上进行了训练（如图像相关的网络在ImageNet数据上进行了训练）
作用
可以用来开箱即用的解决方案

直接用于推理

可以将预训练模型当做特征提取装置来使用，用于迁移学习
当预训练模型学习到的特征容易泛化的时候，迁移学习才能得到比较有效的使用
迁移学习
先在一个基础的数据集上进行任务的训练，生成一个基础网络
然后将学习到的特征重新进行调整或迁移到另一个目标网络上，用来训练目标任务的数据集。]]></description><category></category></item><item><title><![CDATA[联邦学习--要点]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/106050904</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/106050904</guid><author>m00102981</author><pubDate>Mon, 11 May 2020 11:43:15 +0800</pubDate><description><![CDATA[联邦学习
背景
人工智能技术的实现
数据量少，数据质量差的问题，不足以支撑人工智能技术的实现
隐私保护问题，数据也往往以孤岛形式出现
概念
本质是一种分布式机器学习技术，在人工智能领域可以认为是一个机器学习框架
目标是在保证数据隐私安全及合法合规的基础上，实现共同建模，提升AI模型的效果
根据数据分布不同分三个类
横向联邦学习

本质是样本的联合

特征重叠多

用户重叠少

比如不同地区的银行间，他们的业务相似（特征相似），但用户不同（样本不同）

可以看作是基于样本的分布式模型训练

每台机器下都是相同]]></description><category></category></item><item><title><![CDATA[window bat脚本几个常用的命令]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/105943445</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/105943445</guid><author>m00102981</author><pubDate>Wed, 06 May 2020 08:52:56 +0800</pubDate><description><![CDATA[window bat脚本
控制语句

if
for
set

基本标识
注释命令

rem
::符号echo

echo off/on 关闭或显示 回显@

@字符放在命令前面将关闭改命令的回显

参数使用
%i 代表批处理文件中的参数

%0代表批处理自身，带扩展名的全路径提示用户输入变量的方法
如下variable是一个变量名
set /p variable提示用户输入
%variable%表...]]></description><category></category></item><item><title><![CDATA[TF模型部署的特点]]></title><link>https://blog.youkuaiyun.com/m00102981/article/details/105857813</link><guid>https://blog.youkuaiyun.com/m00102981/article/details/105857813</guid><author>m00102981</author><pubDate>Thu, 30 Apr 2020 11:24:32 +0800</pubDate><description><![CDATA[TF模型部署的特点

可扩展性、稳定性、可靠性（能经历大规模多应用部署的考验）好
可扩展性、稳定性、可靠性（能经历大规模多应用部署的考验）好
TF serving高性能，开源的机器学习服务系统，专为部署设计的
TF serving可以结合docker一起使用，部署方便
提供了REST和GRPC的接口
支持regression，classify，predict 的api
serving的轻量化可以很...]]></description><category></category></item></channel></rss>