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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

714閲覧

ValueError: All input arrays (x) should have the same number of samples

taiyo2017

総合スコア170

Keras

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/14 15:28

ValueError: All input arrays (x) should have the same number of samples. Got array shapes: [(1, 698), (38, 796)]

とエラーが出ました。Tracebackで

model.fit([inputs_train, queries_train], answers_train, batch_size=30, epochs=100, validation_data=([inputs_test, queries_test], answers_test))

の行がエラーを引き起こしていると言われました。
(1, 698) と (38, 796)の数が何を表しているのかいまいちよくわかりません。
自然言語処理のモデルを作り、それをLSTMで学習させようとしています。単語ごとに数値を割り振り、単語を数値化するところが終わりました。
inputs_test はその単語ごとに割り振った数字のリストで、story_maxlenは最大長い文章の長さが入っています。queries_testも単語ごとに割り振った数字のリストをもち、query_maxlenも最大長い文章の長さが入っています。そのためなぜこれらの値の大きさが違うのか理解できません。

def vectorize_stories(sentences,word_dct, story_maxlen, query_maxlen): X = [] Xq = [] Y = [] x = [word_idx[story[i]] for story in sentences for i in range(len(story)) if story[i] in word_idx] X.append(x) for item in total_data: for i in range(len(item)): if i == 0: xq = [word_idx[w] for w in item[i] if w in word_idx] Xq.append(xq) else: y = np.zeros(len(word_idx) + 1) if item[i] in word_idx: y[word_idx[item[i]]] = 1 Y.append(y) return (pad_sequences(X, maxlen=story_maxlen),pad_sequences(Xq, maxlen=query_maxlen), np.array(Y))

とコードを書きました。sentencesは入力のデータで

["Where","is","Tom","?"]

のようなリストです。word_dctは単語ごとに数値を割り振った結果の辞書です。story_maxlen と query_maxlenは前述の通りです。

pad_sequences(X, maxlen=story_maxlen)

がinputs_testで、

pad_sequences(Xq, maxlen=query_maxlen)

がqueries_testに対応しています。

このエラーは完璧に同じ長さの文章を学習させないと出るのでしょうか?
どのようにこのエラーを修正すればいいでしょうか?

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

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

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

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

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

guest

回答3

0

エラーメッセージによるとサンプル数が不一致が原因のようです。inputが1件に対しqueryが38件と出ているので、XとXqが不一致なのか、関数に不具合があるか、のどちらかと思います。懸念されている列数は、この場合は一致している必要はありません。ただし、あらかじめ構築したグラフと一致していないとエラーになるかもしれません

投稿2018/08/15 07:30

R.Shigemori

総合スコア3376

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

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

0

ベストアンサー

"ValueError: All input arrays (x) should have the same number of samples"
([訳] 値に誤り:全ての入力配列は、同じ数のサンプルを持つべき(違った大きさの配列を入力にしちゃいけません))
というエラーメッセージなのですから、配列 inputs_test と 配列 queries_test の大きさが違う(shapeを見ると(1, 698)[1行、698列]と(45, 796)[45行、796行]なのですから、違うのは明らか)というのを修正すべきだと思われます。

あとは、tensolflowのマニュアルを調べてみてください。(私はtensorflowに詳しくないので)

投稿2018/08/15 03:29

coco_bauer

総合スコア6915

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

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

taiyo2017

2018/08/15 10:43

配列の長さが違うのが問題でした。ありがとうございます!
guest

0

今問題になっているのはvalidation_data=([inputs_test, queries_test], answers_test)だけですか?

[inputs_train, queries_train], answers_trainの方は問題ありませんか?

投稿2018/08/14 21:13

mkgrei

総合スコア8560

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

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

taiyo2017

2018/08/15 01:21

問題になっているのはvalidation_data=([inputs_test, queries_test], answers_test)だけだと思います。print(inputs_test.shape) print(queries_test.shape) print(answers_test.shape) とプリントアウトすると、 (1, 698) (45, 796) (6329, 937) と出て、エラーを引き起こしている数字を見るとinputs_testとqueries_testしか関係がなさそうなので。
mkgrei

2018/08/15 10:14

Got array shapes: [(1, 698), (38, 796)] と相違があるようですが… 異なるデータですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問