共计 1075 个字符,预计需要花费 3 分钟才能阅读完成。
tf2.0是要力推keras,最近将之前的代码改造成keras(挤时间自己改的,还在测试),这中间看着keras官方文档加上搜索,有些点其实还是存在一定的疑问。
其实主要的问题就是在这模型输入输出这块,keras在构造网络这块还是比较简单的,看着官网的例子关于函数式api提供的例子都是非常的简单。
基本上套路就是一个Input 然后FC之类的就到Output,然后建立模型,fit数据就完成了。
输入的数据格式是数据都事先构造好了,就是现成的不需要经过任何的变换就可以直接使用,不需要做额外的变换。
但是在工程上可就不止这么简单了,现在数据流的获取是使用pipline来实现数据的读取,数据都是存在hdfs上。
tf.data模块去解析,然后返回的是一个迭代器,具体到每一个输入就是一个字典,在pipline读取到数据之后我们需要对这些元数据做一些处理:
- category 特征 embedding
- 数值特征
- sparse特征处理
目前主要的是这三类特征,这么多特征都是需要指定相应的输入去作为模型的输入。官网的例子虽然提到多输入与多输出,但是在这里说一下是因为第一次看完真的还是不知道怎么下手,说是知道有这个动心,但是吧还是不知道怎么做,可能现在就是对keras还是不太熟悉导致。
现在就说一下处理这个的工程的思路:
#定义inputs这个列表就是把所有的Input记录下来作为model的输入
inputs=[]
#处理category类型
for cate in your_category_list:
input=Input((1,),name=cate)
inputs.add(input)
#embedding处理之类的
#数值类特征
for num in your_numerical_list:
input=Input(your_shape)
inputs.add(input)
#sparse 特征,这个处理起来稍微有点麻烦,因为有些sparse特征后续需要处理成embedding向量
你需要构造两个Input
(1)indices
(2)values
#在获得输入之后你需要transform操作,你需要自定义layer去处理这个问题,因为keras还没有sparse_embedding_lookup
的功能,你要使用tf的东西那么你就需要自定义layer去处理这个,这就是需要注意的地方
之前就像在网上有没有类似的教程就是上面这样去说明一下多输入的问题,但是大部分都是照搬官方教程,其实上面的处理过程实际上包含了多输入与自定义layer的过程。
如果你遇到keras多输入多输出相关的问题,可以留言。