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

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

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

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

Python 3.x

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

Q&A

0回答

545閲覧

kerasで学習させようとするとValueErrorになる

tamtam44444

総合スコア13

Keras

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

Python 3.x

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

0グッド

0クリップ

投稿2019/02/06 15:08

前提・実現したいこと

以下のコードを実行するとValueErrorになってしまいます。何が原因なのかわかりません。

発生している問題・エラーメッセージ

Epoch 1/50 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-7-0bdf069155bb> in <module> 11 epochs=50, 12 verbose = 1, ---> 13 callbacks =[earlystopping] 14 ) 15 C:\ProgramData\Anaconda3\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs) 89 warnings.warn('Update your `' + object_name + 90 '` call to the Keras 2 API: ' + signature, stacklevel=2) ---> 91 return func(*args, **kwargs) 92 wrapper._original_function = func 93 return wrapper C:\ProgramData\Anaconda3\lib\site-packages\keras\models.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch) 1254 use_multiprocessing=use_multiprocessing, 1255 shuffle=shuffle, -> 1256 initial_epoch=initial_epoch) 1257 1258 @interfaces.legacy_generator_methods_support C:\ProgramData\Anaconda3\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs) 89 warnings.warn('Update your `' + object_name + 90 '` call to the Keras 2 API: ' + signature, stacklevel=2) ---> 91 return func(*args, **kwargs) 92 wrapper._original_function = func 93 return wrapper C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch) 2175 outs = self.train_on_batch(x, y, 2176 sample_weight=sample_weight, -> 2177 class_weight=class_weight) 2178 2179 if not isinstance(outs, list): C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in train_on_batch(self, x, y, sample_weight, class_weight) 1841 sample_weight=sample_weight, 1842 class_weight=class_weight, -> 1843 check_batch_axis=True) 1844 if self.uses_learning_phase and not isinstance(K.learning_phase(), int): 1845 ins = x + y + sample_weights + [1.] C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size) 1436 for (ref, sw, cw, mode) 1437 in zip(y, sample_weights, class_weights, self._feed_sample_weight_modes)] -> 1438 _check_array_lengths(x, y, sample_weights) 1439 _check_loss_and_target_compatibility(y, 1440 self._feed_loss_fns, C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in _check_array_lengths(inputs, targets, weights) 215 'the same number of samples as target arrays. ' 216 'Found ' + str(list(set_x)[0]) + ' input samples ' --> 217 'and ' + str(list(set_y)[0]) + ' target samples.') 218 if len(set_w) > 1: 219 raise ValueError('All sample_weight arrays should have ' ValueError: Input arrays should have the same number of samples as target arrays. Found 18 input samples and 16 target samples.

該当のソースコード

from keras.models import Sequential from keras.layers import Conv2D from keras import backend as K from keras.preprocessing.image import ImageDataGenerator from PIL import Image import os import numpy as np from keras.callbacks import EarlyStopping model = Sequential() model.add(Conv2D(filters=64, kernel_size=9, padding="same", activation="relu", input_shape=(None,None,3) )) model.add(Conv2D(filters=32, kernel_size=1, padding="same", activation="relu", )) model.add(Conv2D(filters=3, kernel_size=5, padding="same", )) model.summary() def psnr(y_true, y_pred): return -10*K.log(K.mean(K.flatten((y_true - y_pred))**2 ))/np.log(10) BATCH_SIZE = 16 N_TRAIN_DATA = 19440 N_TEST_DATA = 1728 class SegDataGenerator(object): def __init__(self): self.reset() def reset(self): self.x_images = [] self.y_images = [] def flow_from_directory(self,directory, batch_size): folderlist = os.listdir(directory) x_path = directory + "\" + folderlist[0] y_path = directory + "\" + folderlist[1] x_filelist = os.listdir(x_path) y_filelist = os.listdir(y_path) while True: for x_file, y_file in zip(x_filelist, y_filelist): with Image.open(x_path + "\" + x_file) as f: self.x_images.append(np.asarray(f.convert("RGB"), dtype=np.float32)) with Image.open(y_path + "\" + y_file) as t: self.y_images.append(np.asarray(t.convert("RGB"), dtype=np.float32)) if len(self.y_images) == batch_size: y = np.asarray(self.y_images, dtype=np.float32) x = np.asarray(self.x_images, dtype=np.float32) self.reset() yield x/255., y/255., data_gen = SegDataGenerator() train_datagenerator = data_gen.flow_from_directory("トレインファイルパス", batch_size=BATCH_SIZE) test_datagenerator= data_gen.flow_from_directory("テストファイルパス", batch_size=BATCH_SIZE) earlystopping = EarlyStopping(monitor="val_loss",patience=2) model.compile(loss="mean_squared_error", optimizer="adam", metrics=[psnr]) model.fit_generator(train_datagenerator, validation_data = test_datagenerator, steps_per_epoch=N_TRAIN_DATA//BATCH_SIZE, validation_steps=N_TEST_DATA//BATCH_SIZE, epochs=50, verbose = 1, callbacks =[earlystopping] ) pred = model.predict(x_test)

試したこと

generatorの出力の形状を調べると(2,16,100,100,3)でした。

補足情報(FW/ツールのバージョンなど)

python3.6.6
keras2.1.3

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

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

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

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

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

tiitoi

2019/02/06 16:00 編集

書かれてるエラー文の通りなのでは? > Input arrays should have the same number of samples as target arrays. Found 18 input samples and 16 target samples. 入力データの配列とラベルデータの配列の要素数は一致している必要があります。 入力データの配列は18個、ラベルデータの配列は16個のものが見つかりました。
tamtam44444

2019/02/07 12:20

なぜ入力データのラベルが18になるのかわかりません。 generatorからは16個のデータしか取り出してないはずなのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問