本文是笔者参与datawhale组织的深度推荐模型组队学习的分享,学习内容见本链接 ,本文中所指的教程即该链接中的相应文件。
why Wide&Deep?
上一篇笔者实现了Deep Crossing模型,Deep Crossing采用了Embedding + MLP的结构,是推荐系统领域应用深度学习的首篇完整论文,它主要是将深度学习的强泛化能力引入了推荐系统,使模型能够有较强的推理能力,在提高新鲜度、挖掘相关关系不明显的物品时非常有用。
但是在推荐领域还有很多应该被推荐的东西都是很直白的,很显然的。比如我(一个24岁的打工男码农),每天早上都会去超市买个面包,超市可以根据同时段其他人的购买记录给我推荐咖啡,可以根据我的发量给我推荐格子衫,但是这些都是经过模型的推理能力推理出来的,然而实际上,我只是想要个面包,我更希望超市能够给我推荐面包,因此,在利用深度学习的泛化推理能力的同时,也要注意模型的记忆能力。因此Wide&Deep便应运而生。
本次学习我根据MovieLens数据集制作了训练数据,不过由于对tensorflow还不熟悉,自己实现模型失败,暂时还没能将MovieLens数据集用在这次模型中。
我的MovieLens数据集特征工程如下所示:
原数据集Movies Lens Small下载地址:https://grouplens.org/datasets/movielens/ 我的特征工程数据集代码及数据:
思考题
在你的应用场景中,哪些特征适合放在Wide侧,哪些特征适合放在Deep侧,为什么呢?
Ans: 以上述电影推荐为例,我想到两种方案,一是根据用户喜欢的电影风格,和当前电影风格来做推荐,构造“如果用户喜欢A电影风格,则推荐B电影风格”。二是根据用户历史打过好评的电影,与当前电影的评价,构造“如果用户喜欢A电影,则推荐B电影”。其他的数值特征等适合放在Deep侧,让模型去推理,比如“我对2010年以前的A类电影平均打分0.5分,对2010年以后的A类电影平均打分0.7分,因此模型将当前这个2020年的A类电影推荐给我”
为什么Wide部分要用L1 FTRL训练?
Ans:这里使用FTRL是因为它是一个在保证了精度的同时稀疏性很好的优化算法。FTRL引入了一些约束,当特征的权重不满足约束时置0来保证稀疏性。另外,我认为论文里使用这个优化算法还考虑到了app推荐是个很有时效性的任务,用户希望安装的软件往往与刚刚安装的软件强相关,因此使用在线优化更合适。FTRL详细算法推到可以冯杨老师的文章。不过我仍存在一个疑惑,即为什么稀疏性能提高模型的记忆能力?
为什么Deep部分不特别考虑稀疏性的问题?
Ans:Deep部分的输入端本身就是数值类型的稠密的特征,或是经过Embedding构造的稠密化的特征,因此不考虑稀疏性问题。另外,从目的上回答,Dense层希望利用神经网络的推理能力挖掘更不明显的特征的关联关系,将特征进行组合,如果输入特征太稀疏的话不利于网络的训练,也不利于特征组合。
代码运行
自己用数据跑W&D还没成功,所以先跑一下教程的例子。
def WideNDeep(linear_feature_columns, dnn_feature_columns):
# 构建输入层,即所有特征对应的Input()层,这里使用字典的形式返回,方便后续构建模型
dense_input_dict, sparse_input_dict = build_input_layers(linear_feature_columns + dnn_feature_columns)
# 将linear部分的特征中sparse特征筛选出来,后面用来做1维的embedding
linear_sparse_feature_columns = list(filter(lambda x: isinstance(x, SparseFeat), linear_feature_columns))
# 构建模型的输入层,模型的输入层不能是字典的形式,应该将字典的形式转换成列表的形式
# 注意:这里实际的输入与Input()层的对应,是通过模型输入时候的字典数据的key与对应name的Input层
input_layers = list(dense_input_dict.values()) + list(sparse_input_dict.values())
# Wide&Deep模型论文中Wide部分使用的特征比较简单,并且得到的特征非常的稀疏,所以使用了FTRL优化Wide部分(这里没有实现FTRL)
# 但是是根据他们业务进行选择的,我们这里将所有可能用到的特征都输入到Wide部分,具体的细节可以根据需求进行修改
linear_logits = get_linear_logits(dense_input_dict, sparse_input_dict, linear_sparse_feature_columns)
# 构建维度为k的embedding层,这里使用字典的形式返回,方便后面搭建模型
embedding_layers = build_embedding_layers(dnn_feature_columns, sparse_input_dict, is_linear=False)
dnn_sparse_feature_columns = list(filter(lambda x: isinstance(x, SparseFeat), dnn_feature_columns))
# 在Wide&Deep模型中,deep部分的输入是将dense特征和embedding特征拼在一起输入到dnn中
dnn_logits = get_dnn_logits(dense_input_dict, sparse_input_dict, dnn_sparse_feature_columns, embedding_layers)
# 将linear,dnn的logits相加作为最终的logits
output_logits = Add()([linear_logits, dnn_logits])
# 这里的激活函数使用sigmoid
output_layer = Activation("sigmoid")(output_logits)
model = Model(input_layers, output_layer)
return model
# 读取数据
data = pd.read_csv('./data/criteo_sample.txt')
# 划分dense和sparse特征
columns = data.columns.values
dense_features = [feat for feat in columns if 'I' in feat]
sparse_features = [feat for feat in columns if 'C' in feat]
# 简单的数据预处理
train_data = data_process(data, dense_features, sparse_features)
train_data['label'] = data['label']
for i, feat in enumerate(sparse_features):
print(f'{feat}, {data[feat].nunique()}')
# 将特征分组,分成linear部分和dnn部分(根据实际场景进行选择),并将分组之后的特征做标记(使用DenseFeat, SparseFeat)
linear_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4)
for i,feat in enumerate(sparse_features)] + [DenseFeat(feat, 1,)
for feat in dense_features]
dnn_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4)
for i,feat in enumerate(sparse_features)] + [DenseFeat(feat, 1,)
for feat in dense_features]
# 构建WideNDeep模型
history = WideNDeep(linear_feature_columns, dnn_feature_columns)
history.summary()
history.compile(optimizer="adam",
loss="binary_crossentropy",
metrics=["binary_crossentropy", tf.keras.metrics.AUC(name='auc')])
# 将输入数据转化成字典的形式输入
train_model_input = {name: data[name] for name in dense_features + sparse_features}
# 模型训练
history.fit(train_model_input, train_data['label'].values,
batch_size=8, epochs=5, validation_split=0.2, )
WARNING:tensorflow:From /Users/kudengma/opt/anaconda3/envs/ml/lib/python3.7/site-packages/tensorflow/python/ops/init_ops.py:1251: calling VarianceScaling.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
WARNING:tensorflow:From /Users/kudengma/opt/anaconda3/envs/ml/lib/python3.7/site-packages/tensorflow/python/keras/initializers.py:119: calling RandomUniform.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
C1 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C2 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C3 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C4 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C5 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C6 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C7 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C8 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C9 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C10 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C11 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C12 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C13 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C14 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C15 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C16 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C17 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C18 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C19 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C20 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C21 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C22 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C23 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C24 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C25 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
C26 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
kd_emb_C1 (Embedding) (None, 1, 4) 108 C1[0][0]
__________________________________________________________________________________________________
kd_emb_C2 (Embedding) (None, 1, 4) 368 C2[0][0]
__________________________________________________________________________________________________
kd_emb_C3 (Embedding) (None, 1, 4) 688 C3[0][0]
__________________________________________________________________________________________________
kd_emb_C4 (Embedding) (None, 1, 4) 628 C4[0][0]
__________________________________________________________________________________________________
kd_emb_C5 (Embedding) (None, 1, 4) 48 C5[0][0]
__________________________________________________________________________________________________
kd_emb_C6 (Embedding) (None, 1, 4) 28 C6[0][0]
__________________________________________________________________________________________________
kd_emb_C7 (Embedding) (None, 1, 4) 732 C7[0][0]
__________________________________________________________________________________________________
kd_emb_C8 (Embedding) (None, 1, 4) 76 C8[0][0]
__________________________________________________________________________________________________
kd_emb_C9 (Embedding) (None, 1, 4) 8 C9[0][0]
__________________________________________________________________________________________________
kd_emb_C10 (Embedding) (None, 1, 4) 568 C10[0][0]
__________________________________________________________________________________________________
kd_emb_C11 (Embedding) (None, 1, 4) 692 C11[0][0]
__________________________________________________________________________________________________
kd_emb_C12 (Embedding) (None, 1, 4) 680 C12[0][0]
__________________________________________________________________________________________________
kd_emb_C13 (Embedding) (None, 1, 4) 664 C13[0][0]
__________________________________________________________________________________________________
kd_emb_C14 (Embedding) (None, 1, 4) 56 C14[0][0]
__________________________________________________________________________________________________
kd_emb_C15 (Embedding) (None, 1, 4) 680 C15[0][0]
__________________________________________________________________________________________________
kd_emb_C16 (Embedding) (None, 1, 4) 672 C16[0][0]
__________________________________________________________________________________________________
kd_emb_C17 (Embedding) (None, 1, 4) 36 C17[0][0]
__________________________________________________________________________________________________
kd_emb_C18 (Embedding) (None, 1, 4) 508 C18[0][0]
__________________________________________________________________________________________________
kd_emb_C19 (Embedding) (None, 1, 4) 176 C19[0][0]
__________________________________________________________________________________________________
kd_emb_C20 (Embedding) (None, 1, 4) 16 C20[0][0]
__________________________________________________________________________________________________
kd_emb_C21 (Embedding) (None, 1, 4) 676 C21[0][0]
__________________________________________________________________________________________________
kd_emb_C22 (Embedding) (None, 1, 4) 24 C22[0][0]
__________________________________________________________________________________________________
kd_emb_C23 (Embedding) (None, 1, 4) 40 C23[0][0]
__________________________________________________________________________________________________
kd_emb_C24 (Embedding) (None, 1, 4) 500 C24[0][0]
__________________________________________________________________________________________________
kd_emb_C25 (Embedding) (None, 1, 4) 80 C25[0][0]
__________________________________________________________________________________________________
kd_emb_C26 (Embedding) (None, 1, 4) 360 C26[0][0]
__________________________________________________________________________________________________
I1 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I2 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I3 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I4 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I5 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I6 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I7 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I8 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I9 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I10 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I11 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I12 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
I13 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
flatten_26 (Flatten) (None, 4) 0 kd_emb_C1[0][0]
__________________________________________________________________________________________________
flatten_27 (Flatten) (None, 4) 0 kd_emb_C2[0][0]
__________________________________________________________________________________________________
flatten_28 (Flatten) (None, 4) 0 kd_emb_C3[0][0]
__________________________________________________________________________________________________
flatten_29 (Flatten) (None, 4) 0 kd_emb_C4[0][0]
__________________________________________________________________________________________________
flatten_30 (Flatten) (None, 4) 0 kd_emb_C5[0][0]
__________________________________________________________________________________________________
flatten_31 (Flatten) (None, 4) 0 kd_emb_C6[0][0]
__________________________________________________________________________________________________
flatten_32 (Flatten) (None, 4) 0 kd_emb_C7[0][0]
__________________________________________________________________________________________________
flatten_33 (Flatten) (None, 4) 0 kd_emb_C8[0][0]
__________________________________________________________________________________________________
flatten_34 (Flatten) (None, 4) 0 kd_emb_C9[0][0]
__________________________________________________________________________________________________
flatten_35 (Flatten) (None, 4) 0 kd_emb_C10[0][0]
__________________________________________________________________________________________________
flatten_36 (Flatten) (None, 4) 0 kd_emb_C11[0][0]
__________________________________________________________________________________________________
flatten_37 (Flatten) (None, 4) 0 kd_emb_C12[0][0]
__________________________________________________________________________________________________
flatten_38 (Flatten) (None, 4) 0 kd_emb_C13[0][0]
__________________________________________________________________________________________________
flatten_39 (Flatten) (None, 4) 0 kd_emb_C14[0][0]
__________________________________________________________________________________________________
flatten_40 (Flatten) (None, 4) 0 kd_emb_C15[0][0]
__________________________________________________________________________________________________
flatten_41 (Flatten) (None, 4) 0 kd_emb_C16[0][0]
__________________________________________________________________________________________________
flatten_42 (Flatten) (None, 4) 0 kd_emb_C17[0][0]
__________________________________________________________________________________________________
flatten_43 (Flatten) (None, 4) 0 kd_emb_C18[0][0]
__________________________________________________________________________________________________
flatten_44 (Flatten) (None, 4) 0 kd_emb_C19[0][0]
__________________________________________________________________________________________________
flatten_45 (Flatten) (None, 4) 0 kd_emb_C20[0][0]
__________________________________________________________________________________________________
flatten_46 (Flatten) (None, 4) 0 kd_emb_C21[0][0]
__________________________________________________________________________________________________
flatten_47 (Flatten) (None, 4) 0 kd_emb_C22[0][0]
__________________________________________________________________________________________________
flatten_48 (Flatten) (None, 4) 0 kd_emb_C23[0][0]
__________________________________________________________________________________________________
flatten_49 (Flatten) (None, 4) 0 kd_emb_C24[0][0]
__________________________________________________________________________________________________
flatten_50 (Flatten) (None, 4) 0 kd_emb_C25[0][0]
__________________________________________________________________________________________________
flatten_51 (Flatten) (None, 4) 0 kd_emb_C26[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 13) 0 I1[0][0]
I2[0][0]
I3[0][0]
I4[0][0]
I5[0][0]
I6[0][0]
I7[0][0]
I8[0][0]
I9[0][0]
I10[0][0]
I11[0][0]
I12[0][0]
I13[0][0]
__________________________________________________________________________________________________
concatenate_2 (Concatenate) (None, 104) 0 flatten_26[0][0]
flatten_27[0][0]
flatten_28[0][0]
flatten_29[0][0]
flatten_30[0][0]
flatten_31[0][0]
flatten_32[0][0]
flatten_33[0][0]
flatten_34[0][0]
flatten_35[0][0]
flatten_36[0][0]
flatten_37[0][0]
flatten_38[0][0]
flatten_39[0][0]
flatten_40[0][0]
flatten_41[0][0]
flatten_42[0][0]
flatten_43[0][0]
flatten_44[0][0]
flatten_45[0][0]
flatten_46[0][0]
flatten_47[0][0]
flatten_48[0][0]
flatten_49[0][0]
flatten_50[0][0]
flatten_51[0][0]
__________________________________________________________________________________________________
concatenate_3 (Concatenate) (None, 117) 0 concatenate_1[0][0]
concatenate_2[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 1024) 120832 concatenate_3[0][0]
__________________________________________________________________________________________________
dropout (Dropout) (None, 1024) 0 dense_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 512) 524800 dropout[0][0]
__________________________________________________________________________________________________
1d_emb_C1 (Embedding) (None, 1, 1) 27 C1[0][0]
__________________________________________________________________________________________________
1d_emb_C2 (Embedding) (None, 1, 1) 92 C2[0][0]
__________________________________________________________________________________________________
1d_emb_C3 (Embedding) (None, 1, 1) 172 C3[0][0]
__________________________________________________________________________________________________
1d_emb_C4 (Embedding) (None, 1, 1) 157 C4[0][0]
__________________________________________________________________________________________________
1d_emb_C5 (Embedding) (None, 1, 1) 12 C5[0][0]
__________________________________________________________________________________________________
1d_emb_C6 (Embedding) (None, 1, 1) 7 C6[0][0]
__________________________________________________________________________________________________
1d_emb_C7 (Embedding) (None, 1, 1) 183 C7[0][0]
__________________________________________________________________________________________________
1d_emb_C8 (Embedding) (None, 1, 1) 19 C8[0][0]
__________________________________________________________________________________________________
1d_emb_C9 (Embedding) (None, 1, 1) 2 C9[0][0]
__________________________________________________________________________________________________
1d_emb_C10 (Embedding) (None, 1, 1) 142 C10[0][0]
__________________________________________________________________________________________________
1d_emb_C11 (Embedding) (None, 1, 1) 173 C11[0][0]
__________________________________________________________________________________________________
1d_emb_C12 (Embedding) (None, 1, 1) 170 C12[0][0]
__________________________________________________________________________________________________
1d_emb_C13 (Embedding) (None, 1, 1) 166 C13[0][0]
__________________________________________________________________________________________________
1d_emb_C14 (Embedding) (None, 1, 1) 14 C14[0][0]
__________________________________________________________________________________________________
1d_emb_C15 (Embedding) (None, 1, 1) 170 C15[0][0]
__________________________________________________________________________________________________
1d_emb_C16 (Embedding) (None, 1, 1) 168 C16[0][0]
__________________________________________________________________________________________________
1d_emb_C17 (Embedding) (None, 1, 1) 9 C17[0][0]
__________________________________________________________________________________________________
1d_emb_C18 (Embedding) (None, 1, 1) 127 C18[0][0]
__________________________________________________________________________________________________
1d_emb_C19 (Embedding) (None, 1, 1) 44 C19[0][0]
__________________________________________________________________________________________________
1d_emb_C20 (Embedding) (None, 1, 1) 4 C20[0][0]
__________________________________________________________________________________________________
1d_emb_C21 (Embedding) (None, 1, 1) 169 C21[0][0]
__________________________________________________________________________________________________
1d_emb_C22 (Embedding) (None, 1, 1) 6 C22[0][0]
__________________________________________________________________________________________________
1d_emb_C23 (Embedding) (None, 1, 1) 10 C23[0][0]
__________________________________________________________________________________________________
1d_emb_C24 (Embedding) (None, 1, 1) 125 C24[0][0]
__________________________________________________________________________________________________
1d_emb_C25 (Embedding) (None, 1, 1) 20 C25[0][0]
__________________________________________________________________________________________________
1d_emb_C26 (Embedding) (None, 1, 1) 90 C26[0][0]
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 512) 0 dense_2[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate) (None, 13) 0 I1[0][0]
I2[0][0]
I3[0][0]
I4[0][0]
I5[0][0]
I6[0][0]
I7[0][0]
I8[0][0]
I9[0][0]
I10[0][0]
I11[0][0]
I12[0][0]
I13[0][0]
__________________________________________________________________________________________________
flatten (Flatten) (None, 1) 0 1d_emb_C1[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 1) 0 1d_emb_C2[0][0]
__________________________________________________________________________________________________
flatten_2 (Flatten) (None, 1) 0 1d_emb_C3[0][0]
__________________________________________________________________________________________________
flatten_3 (Flatten) (None, 1) 0 1d_emb_C4[0][0]
__________________________________________________________________________________________________
flatten_4 (Flatten) (None, 1) 0 1d_emb_C5[0][0]
__________________________________________________________________________________________________
flatten_5 (Flatten) (None, 1) 0 1d_emb_C6[0][0]
__________________________________________________________________________________________________
flatten_6 (Flatten) (None, 1) 0 1d_emb_C7[0][0]
__________________________________________________________________________________________________
flatten_7 (Flatten) (None, 1) 0 1d_emb_C8[0][0]
__________________________________________________________________________________________________
flatten_8 (Flatten) (None, 1) 0 1d_emb_C9[0][0]
__________________________________________________________________________________________________
flatten_9 (Flatten) (None, 1) 0 1d_emb_C10[0][0]
__________________________________________________________________________________________________
flatten_10 (Flatten) (None, 1) 0 1d_emb_C11[0][0]
__________________________________________________________________________________________________
flatten_11 (Flatten) (None, 1) 0 1d_emb_C12[0][0]
__________________________________________________________________________________________________
flatten_12 (Flatten) (None, 1) 0 1d_emb_C13[0][0]
__________________________________________________________________________________________________
flatten_13 (Flatten) (None, 1) 0 1d_emb_C14[0][0]
__________________________________________________________________________________________________
flatten_14 (Flatten) (None, 1) 0 1d_emb_C15[0][0]
__________________________________________________________________________________________________
flatten_15 (Flatten) (None, 1) 0 1d_emb_C16[0][0]
__________________________________________________________________________________________________
flatten_16 (Flatten) (None, 1) 0 1d_emb_C17[0][0]
__________________________________________________________________________________________________
flatten_17 (Flatten) (None, 1) 0 1d_emb_C18[0][0]
__________________________________________________________________________________________________
flatten_18 (Flatten) (None, 1) 0 1d_emb_C19[0][0]
__________________________________________________________________________________________________
flatten_19 (Flatten) (None, 1) 0 1d_emb_C20[0][0]
__________________________________________________________________________________________________
flatten_20 (Flatten) (None, 1) 0 1d_emb_C21[0][0]
__________________________________________________________________________________________________
flatten_21 (Flatten) (None, 1) 0 1d_emb_C22[0][0]
__________________________________________________________________________________________________
flatten_22 (Flatten) (None, 1) 0 1d_emb_C23[0][0]
__________________________________________________________________________________________________
flatten_23 (Flatten) (None, 1) 0 1d_emb_C24[0][0]
__________________________________________________________________________________________________
flatten_24 (Flatten) (None, 1) 0 1d_emb_C25[0][0]
__________________________________________________________________________________________________
flatten_25 (Flatten) (None, 1) 0 1d_emb_C26[0][0]
__________________________________________________________________________________________________
dense_3 (Dense) (None, 256) 131328 dropout_1[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 1) 14 concatenate[0][0]
__________________________________________________________________________________________________
add (Add) (None, 1) 0 flatten[0][0]
flatten_1[0][0]
flatten_2[0][0]
flatten_3[0][0]
flatten_4[0][0]
flatten_5[0][0]
flatten_6[0][0]
flatten_7[0][0]
flatten_8[0][0]
flatten_9[0][0]
flatten_10[0][0]
flatten_11[0][0]
flatten_12[0][0]
flatten_13[0][0]
flatten_14[0][0]
flatten_15[0][0]
flatten_16[0][0]
flatten_17[0][0]
flatten_18[0][0]
flatten_19[0][0]
flatten_20[0][0]
flatten_21[0][0]
flatten_22[0][0]
flatten_23[0][0]
flatten_24[0][0]
flatten_25[0][0]
__________________________________________________________________________________________________
dropout_2 (Dropout) (None, 256) 0 dense_3[0][0]
__________________________________________________________________________________________________
add_1 (Add) (None, 1) 0 dense[0][0]
add[0][0]
__________________________________________________________________________________________________
dense_4 (Dense) (None, 1) 257 dropout_2[0][0]
__________________________________________________________________________________________________
add_2 (Add) (None, 1) 0 add_1[0][0]
dense_4[0][0]
__________________________________________________________________________________________________
activation (Activation) (None, 1) 0 add_2[0][0]
==================================================================================================
Total params: 788,621
Trainable params: 788,621
Non-trainable params: 0
__________________________________________________________________________________________________
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Train on 160 samples, validate on 40 samples
Epoch 1/5
160/160 [==============================] - 16s 102ms/sample - loss: 0.7567 - binary_crossentropy: 0.7567 - auc: 0.4952 - val_loss: 0.8477 - val_binary_crossentropy: 0.8477 - val_auc: 0.4117
Epoch 2/5
160/160 [==============================] - 1s 6ms/sample - loss: 0.6737 - binary_crossentropy: 0.6737 - auc: 0.5155 - val_loss: 0.6553 - val_binary_crossentropy: 0.6553 - val_auc: 0.5613
Epoch 3/5
160/160 [==============================] - 1s 7ms/sample - loss: 0.5816 - binary_crossentropy: 0.5816 - auc: 0.6353 - val_loss: 0.8066 - val_binary_crossentropy: 0.8066 - val_auc: 0.6182
Epoch 4/5
160/160 [==============================] - 1s 6ms/sample - loss: 0.5970 - binary_crossentropy: 0.5970 - auc: 0.6472 - val_loss: 0.6700 - val_binary_crossentropy: 0.6700 - val_auc: 0.6553
Epoch 5/5
160/160 [==============================] - 1s 7ms/sample - loss: 0.4295 - binary_crossentropy: 0.4295 - auc: 0.8090 - val_loss: 0.6415 - val_binary_crossentropy: 0.6415 - val_auc: 0.6766