tensorflow笔记,字节跳动客户端开发面经

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理解:\*\*\*\*\*\*\*\*\*\*/



  1. 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])
  1. 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)]
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值