2017-07-26 16 views
1

私はケラスを使い慣れていません。文書に対して畳み込みを試みています。各文書は、形状が[40 * 4000](各文書には40文、各文には20語があるため、単語の埋め込み次元は200です)の行列で表されます。私は3つの言葉の上に畳み込みを行うたいKeras {ValueError}:入力0はレイヤーconv2d_2と互換性がありません

、これは(正確に同じではありませんが、あなたはあなたのマシン上でこのコードを実行することができます)私のコードです:

import keras 
from keras.layers import Input, Embedding, Dense, merge, Conv2D 
from keras.layers.core import Reshape 

tokens_input = Input(name='input', shape=(40, 20), dtype='int32') 

x = Embedding(25000 + 1, 200, name="embedding")(tokens_input) 
x = Reshape((40, -1), 
      name="reshape")(x) 


cur_conv = Conv2D(20, kernel_size=(3*200, 1), 
       strides=(200, 1), padding='valid', activation='relu')(x) 

しかし、私は、このエラーメッセージが表示されます:入力0でありますconv2d_1との互換性がありません:予想されるndim = 4、見つかったndim = 3

答えて

0

Conv2Dレイヤへの入力はシェイプ(サンプル、チャンネル、幅、高さ)を持ち、エンベディングからの出力は3Dすべきだ。埋め込み出力をイメージとして解釈する方法を定義する必要があります。チャンネルディメンションを追加して1に設定する必要があります。

+0

問題を解決しましたが、私はConv2Dのkerasドキュメントを読んで、パラメータkernel_size 2D畳み込みウィンドウ(** https://keras.io/layers/convolutional/)の**幅と高さ**、実際には、**高さと幅**、つまり行と列を指定するkernel_sizeと思う、私は正しい? – Joey

+0

@Joey入力形状に指定された幅と高さは入力データに対応し、畳み込みフィルタには対応しません。畳み込みフィルタよりもはるかに大きなイメージを持つことができます。 –

+0

私はそれをはっきり言っていないかもしれません。私はConv2D ** kernel_size **のパラメタを意味しています。ドキュメントにはフィルタの幅と高さ**が指定されていますが、フィルタの高さと幅**、つまり行フィルタのcols。 – Joey

関連する問題