首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras permute_dimension导致奇怪的张量形状

Keras permute_dimension导致奇怪的张量形状
EN

Stack Overflow用户
提问于 2019-09-13 07:53:40
回答 1查看 116关注 0票数 0

我正在尝试构建一个模型,遇到了一个问题。我一直在尝试调试它,但遇到了一个奇怪的问题,我认为这可能是原因,但我不确定我做错了什么。我已经将我认为的问题简化为一小段代码,您可以在colab上运行。

这是一个colab,你可以尝试运行这个:https://colab.research.google.com/drive/1pSTwCwMFGlWgJOP3gn9WF6pZq2CiP4XJ

代码语言:javascript
复制
import keras
from keras.layers import Layer, Dense, Input, Reshape
import keras.backend as K

class SimplePermute(Layer):
    def __init__(self, **kwargs):
        super(SimplePermute, self).__init__(**kwargs)

    def call(self, inputs, **kwargs):
        return K.permute_dimensions(inputs, [0,2,1])
test_i = Input(shape=(10, 256))
test = SimplePermute()(test_i)
print(test.get_shape())
print(K.int_shape(test))
test = Dense(units=100, activation="softmax", name="sft2")(test)
print(test.get_shape())
print(K.int_shape(test))

我希望第二系列的print输出的是排列后的张量形状--即?,256,10。然而,K.int_shape()返回?,10,256,而TF的get_shape()返回正确排列的形状。

我认为这种内部不匹配导致了我在模型下游看到的错误。

EN

回答 1

Stack Overflow用户

发布于 2019-09-13 11:06:40

您的自定义层没有实现compute_output_shape方法。这是Keras用来确定张量的_keras_shape属性的方法,该属性由K.int_shape返回。

  • 你可以使用标准的Permute((2,1))层。
  • ,也可以使用Lambda(lambda x: K.permute_dimensions(x, [0,2,1]))层。
  • ,或者您可以实现compute_output_shape方法:

代码语言:javascript
复制
def compute_output_shape(self, input_shape): 
    return (input_shape[0], input_shape[2], input_shape[1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57915767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档