Keras-如何在不损害计算图的情况下删除无用的维?

顺东

在生成深度学习模型K.squeeze时,当前两个维度为“无”形状时,我使用函数来压缩无用的维度。

import keras.backend as K
>>> K.int_shape(user_input_for_TD)
(None, None, 1, 32)
>>> K.int_shape(K.squeeze(user_input_for_TD, axis=-2))
(None, None, 32)

但是,这将产生以下错误,似乎K.squeeze函数损害了计算图,是否有任何解决方案可以摆脱此问题?也许那个函数不支持计算梯度,这是不可微分的。

File "/home/sundong/anaconda3/envs/py36/lib/python3.6/site-packages/keras/engine/network.py", line 1325, in build_map
    node = layer._inbound_nodes[node_index]
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

代码块下面是导致该错误的整个代码块。

user_embedding_layer = Embedding(
            input_dim=len(self.data.visit_embedding),
            output_dim=32,
            weights=[np.array(list(self.data.visit_embedding.values()))],
            input_length=1,
            trainable=False)
...
all_areas_lstm = LSTM(1024, return_sequences=True)(all_areas_rslt)   # (None, None, 1024)
user_input_for_TD = Lambda(lambda x: x[:, :, 0:1])(multiple_inputs)  # (None, None, 1) 
user_input_for_TD = TimeDistributed(user_embedding_layer)(user_input_for_TD) # (None, None, 1, 32) 
user_input_for_TD = K.squeeze(user_input_for_TD, axis=-2) # (None, None, 32) 
aggre_threeway_inputs = Concatenate()([user_input_for_TD, all_areas_lstm]) # should be (None, None, 1056) 
threeway_encoder = TimeDistributed(ThreeWay(output_dim=512))
three_way_rslt = threeway_encoder(aggre_threeway_inputs) # should be (None, None, 512) 
logits = Dense(365, activation='softmax')(three_way_rslt) # should be (None, None, 365)
self.model = keras.Model(inputs=multiple_inputs, outputs=logits)

通过删除下面两行(不使其通过嵌入层),代码可以正常工作。在这种情况下,尺寸aggre_threeway_inputs = Concatenate()([user_input_for_TD, all_areas_lstm])为(None,None,1025)。

user_input_for_TD = TimeDistributed(user_embedding_layer)(user_input_for_TD)
user_input_for_TD = K.squeeze(user_input_for_TD, axis=-2)
顺东

我通过使用Lambda带有索引层而不是K.squeeze函数解决它

from keras.layers import Lambda
>>> K.int_shape(user_input_for_TD)
(None, None, 1, 32)
>>> K.int_shape(Lambda(lambda x: x[:, :, 0, :])(user_input_for_TD))
(None, None, 32)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在仍然没有尺寸的情况下,Keras如何在早期阶段计算参数数量?

来自分类Dev

如何在不崩溃Tkinter菜单的情况下使用Keras调用模块?

来自分类Dev

如何在不破坏结构的情况下重命名Keras模型的图层?

来自分类Dev

如何在不损害 Windows 10 分区的情况下用 Ubuntu 替换 Linux Mint 分区?

来自分类Dev

如何在不使所有数据在Keras中变为float32的情况下进行训练/测试?

来自分类Dev

如何在不产生无用行的情况下连接两个表

来自分类Dev

如何获得Keras激活?

来自分类Dev

如何加载Keras模型?

来自分类Dev

如何使用Keras TimeseriesGenerator

来自分类Dev

如何重置Keras指标?

来自分类Dev

Keras:如何乘法()?

来自分类Dev

如何在不丑陋的情况下删除评论?

来自分类Dev

如何在不访问Windows的情况下删除grub

来自分类Dev

如何在不破坏依赖的情况下删除ImageMagick?

来自分类Dev

如何在不登录的情况下删除坏程序?

来自分类Dev

如何在没有return_sequences的情况下在keras中堆叠多个lstm?

来自分类常见问题

如何在Tensorflow中从tf.keras导入keras?

来自分类Dev

Tensorflow Keras形状不匹配

来自分类Dev

如何正确设置Keras模型?

来自分类Dev

如何使用conda更新Keras

来自分类Dev

如何加载微调的Keras模型

来自分类Dev

如何修改keras的激活功能?

来自分类Dev

如何添加keras辍学图层?

来自分类Dev

Keras:如何记录验证损失

来自分类Dev

如何恢复 Keras LSTM 状态

来自分类Dev

如何重用“复合”Keras 层?

来自分类Dev

Keras 如何读取输入数据?

来自分类Dev

Matlab / Octave:如何在不评估的情况下编写n维零填充算法

来自分类Dev

默认情况下,Keras SimpleRNN / LSTM使用哪个轴作为时间轴?

Related 相关文章

热门标签

归档