質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1013閲覧

keras.layers.Concatenateを使ったら配列のshapeが変更されてしまった

good_morning

総合スコア61

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/12/15 08:08

編集2020/12/15 10:21

Kerasを使ったディープラーニングのモデルにおいて、画像からの出力と日本語のデータをマージしてLSTMに入力したいので、keras.layersのConcatenateを使ったら、どうも配列のサイズが変わってしまうようでした。エラーメッセージは次のとおりです。

ValueError: Dimension 0 in both shapes must be equal, but are 200 and 1. Shapes are [200] and [1]. for 'concatenate_1/concat_1' (op: 'ConcatV2') with input shapes: [?,1,200], [?,63,1], [] and with computed input tensors: input[2] = <1>.

元々、画像からの出力shapeが(None, 1, 200)で、日本語の分散表現のshapeが(None, 63, 200)になっています。従いまして、Concatenateを使うと日本語の分散表現のshapeが(None, 63, 1)になってしまうということになります。

該当箇所のソースコードは次のとおりです。

def define_model(vocab_size, max_length): # 画像の特徴を入力するレイヤ inputs1 = Input(shape=(4096,)) fe1 = Dropout(0.5)(inputs1) fe2 = Dense(200, activation='relu')(fe1) fe3 = K.expand_dims(fe2, axis=1) # 文章を入力するレイヤ inputs2 = Input(shape=(max_length,)) se1 = Embedding(vocab_size, embedding_dim, weights=[embedding_matrix], trainable=False, mask_zero=True)(inputs2) # 上の二つを結合する部分 se2 = Concatenate(axis=1)([fe3, se1]) se3 = LSTM(200)(se2) decoder2 = Dense(200, activation='relu')(se3) outputs = Dense(vocab_size, activation='softmax')(decoder2) # モデルの定義.二つを入力にとって一つを出力する形になる model = Model(inputs=[inputs1, inputs2], outputs=outputs) model.compile(loss='categorical_crossentropy', optimizer='adam') model.summary() return model

ちなみにembedding_dimは200に設定しています。
どこか間違っていますでしょうか。
どなたか詳しい方、ご教示願います。

環境
ubuntu:18.04
python:3.6.9
keras:2.4.3
tensorflow:2.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問