def func(a, *args) 调用时应该func(10,1,3,2,1,4)
def func(a, kwargs) 调用时应该func(10,‘c’:1, ‘d’: 14, ‘e’:10)或者func(10,{‘c’:1, ‘d’: 14, ‘e’:10})
*作用于tuple(list),**作用于dict时表示将元组或字典拆开,变成元素散列的形式。如
func(*(1,2,3)) == func(1,2,3) not func((1,2,3))
func(**{‘a’:1,‘b’:2}) == func(a=1,b=2)
zip(a,b,c…) 注意参数是散列形式,会将a,b,c中对应位置的元素组合放到list里。如果直接向zip传入一个list会认为是一个元素,应该zip(*[])
* tf.group()与tf.control\_dependencies()
tf.group(a,b,c…)将多个op合并为一个op,注意参数是多个op,而不是op list,传入list参数要tf.group(\*\[e1,e2…\]).相对于control\_dependencies, group 合并的op是没有先后顺序的,等价于
train_op = tf.group(a,b) ==>
with tf.control_dependencies([a,b]):
train_op = tf.no_op()
没有重载,一个tensor判断或者!=,是用来判断None的,不管tensor维度是多少都只返回一个bool值,不同于tf.equal。如果想实现逻辑比较只能用tf.equal。
/相关API理解:\*\*\*\*\*\*\*\*\*\*/
- tf.stack([tensor, tensor…], axis)在制定轴stack,增加一个维度 ,
tf.concat([tensor, tensor…], axis)在制定轴连接tensor,不增加维度
假设a=[[1,2,3], b=[[7,8,9], [[[1 2 3] tf.concat([a,c], axis=0) [[1,2,3,7,8,9],
[4,5,6]] [6,7,8]] --> tf.stack([a,b], axis=0) [4 5 6]] -> [4,5,6,6,7,8]]
[[7 8 9]
[6 7 8]]]
tf.unstack(tensor, axis) 在制定轴将tensor拆开,数量为该轴维度,维度减少一个。
tf.split(tensor, num_or_size_splits, axis):拆开但不减少维度,num=int:均匀分;num=list:按list元素给定的形状分。
tf.split(tensor(2,11), [1,5,5])
- SparseTensor和DenseTensor
sparseTensor是(batch_size, 2)第一列是序号表示在这个batch中的索引,第二个是具体值。
denseTensor是(batch_szie, label_num)的,是onehot形式
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
* python篇–内置函数
这种设置用于向某函数传入回调函数,需要出规定参数以外的其他参数,这时候需要定义内置函数,外层函数传入额外参数,内置函数仍然是回调函数的格式,外层函数直接返回内层函数的函数名。
def _out(other_params):
#do with other params...
def _in(origin_params):
#do som thing
return _in
api\_func(\_out(params)) #因为\_out(params) == \_in
命名规范: 类成员变量用self.定义,私有成员变量和函数用前置两个下划线定义,不能被本类以外的其他作用域调用。共有的成员前不加下划线或加一个。静态函数用@staticmethod修饰,使用同c++。
glabal\_step 获取有两种方法,第一种直接tf.train.get\_global\_step(),第二种定义变量
global\_step =tf.get\_variable(0, dtype=tf.int32, trainable=False)
但是两者都要传入梯度更新函数中,使变量得到更新。
opt.minimize(global\_step=global\_step) #在这两两个函数中,每当权重更新一次,global\_step变量加1.
or opt.apply\_gradients(global\_step=global\_step) #或者将变量换成tf.train.get\_global\_step()
* 多gpu并行
(1)gpu设置
config = tf.ConfigProto()
config.gpu\_options.allow\_growth = True #允许内存增长模式。默认情况是预分配空间的方式即把gpu占满,防止内存碎片。如果使用allow\_growth内存会一点点增加但不会减少,同时为了避免内存碎片。
config.gpu\_options.per\_process\_gpu\_memory\_fraction = 0.4#限制使用每块gpu内存的比例,不常用
(2)会设置一个参数设备(ps)和多个计算设备(worker),在ps上放置参数在worker放置计算节点,但每个worker上也会保存模型参数的副本(tower), 这样是把参数放置在cpu而计算op定义在gpu,当然也可以图省事都定义在ps上。 首先数据会被分成多分送入不同的worker,计算相应的loss, gradient, prediction,最后将这些量进行平均作为最终结果来更新模型。在定义变量时一定要使用变量重用的方式,这能保证不同的worker和ps之间的模型共享。
keras模型+tensorflow训练
[https://www.tensorflow.org/guide/estimators]( )
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/cc58c8996548574fbbf58154331845e2.png)
![img](https://img-blog.csdnimg.cn/img_convert/dc2e952394d3327b8bdf2c2215c25a03.png)
![img](https://img-blog.csdnimg.cn/img_convert/43fffd357060aebb998cc03bea8a4998.png)
![img](https://img-blog.csdnimg.cn/img_convert/10eac5c448c287f32f584550088ebf83.png)
![img](https://img-blog.csdnimg.cn/img_convert/d8cbbcc7321992521e893851cfb0cf63.png)
![img](https://img-blog.csdnimg.cn/img_convert/d6ef3b12f525f11ba053c583edd96948.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/fc4ee3e153fb4a1f47df4e26e9104c22.png)
### 更多Android高级工程师进阶学习资料
**进阶学习视频**
![](https://img-blog.csdnimg.cn/img_convert/0c2eac772d58f76976a5e3f3e14addd2.webp?x-oss-process=image/format,png)
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
![](https://img-blog.csdnimg.cn/img_convert/81c2036d77cee4ddd093cb220783c73e.webp?x-oss-process=image/format,png)
**里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/82aa2c2ba6b21a1f940137d3e8f79ee3.png)
同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-Dl0N4FTr-1712769072060)]