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

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

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

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

Python

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

Q&A

解決済

1回答

2338閲覧

kerasを学習させようとするとValueError: Error when checking inputがでて困っています。

meJ15

総合スコア55

Keras

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

Python

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

0グッド

0クリップ

投稿2018/12/14 07:23

前提・実現したいこと

kerasを使って学習させようとするとinputエラーがでる。
参考URL

30行2列のcsvファイルの数値データがあり、それらにラベルをつけモデルに学習させようとしています。
このような5exa.csvがあります
イメージ説明

その参照しているcsvファイルの中身がこのように30行×2列です。
イメージ説明

まず5exa.csvのx:dataの名前にmageがあったら、ラベルを0にしてtwistがあったらラベルを1にして。。。という風にラベルを順番に保存します。
また参照する30行2列を順番に
60行のnp.arrayに変換して
image_list = []に代入
するプログラムを書き学習させる段階でエラーがでました。

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

ValueError: Error when checking input: expected dense_55_input to have shape (60,) but got array with shape (1,)

該当のソースコード

# 学習用のデータを作る. image_list = [] label_list = [] #評価用のcsvファイル読み込み df = pd.read_csv(filepath_or_buffer="5exa.csv", encoding="ms932", sep=",") #iterrowsで行ごとに読み、rowに保存 for index, row in df.iterrows(): data = np.loadtxt(row["x:data"], # 読み込みたいファイルのパス delimiter=",", # ファイルの区切り文字 skiprows=0, # 先頭の何行を無視するか(指定した行数までは読み込まない) usecols=(0,1) # 読み込みたい列番号 ) #もし読み込んだファイル名にmageがあれば if ('mage'in row["x:data"]): label = 0 #もし読み込んだファイル名にtwistがあれば if ('twist'in row["x:data"]): label = 1 #もし読み込んだファイル名にnoneがあれば if ('none'in row["x:data"]): label = 2 #もし読み込んだファイル名にwalkがあれば if ('walk'in row["x:data"]): label = 3 #もし読み込んだファイル名にrunがあれば if ('run'in row["x:data"]): label = 4 np.set_printoptions( floatmode='fixed') #デバック用 # print(row["x:data"]) #print("------------------------------------------") #print(data) # print("------------------------------------------") # #データを60行一列に image_list.append(np.reshape(data,(60,1))) label_list.append(label) # ラベルの配列を1と0からなるラベル配列に変更 # 0 -> [1,0], 1 -> [0,1] という感じ。 Y = to_categorical(label_list) # モデルを生成してニューラルネットを構築 model = Sequential() model.add(Dense(200, input_dim=60)) model.add(Activation("relu")) model.add(Dropout(0.2)) model.add(Dense(200)) model.add(Activation("relu")) model.add(Dropout(0.2)) model.add(Dense(5)) model.add(Activation("softmax")) # オプティマイザにAdamを使用 opt = Adam(lr=0.001) # モデルをコンパイル model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) # 学習を実行。10%はテストに使用。 model.fit(image_list, Y, nb_epoch=1500, batch_size=10, validation_split=0.1)

試したこと

モデルを生成してニューラルネットを構築
model = Sequential()
model.add(Dense(200, input_dim=1))
とすると
ValueError: Input arrays should have the same number of samples as target arrays. Found 60 input samples and 12 target samples.
というエラーになります

どこを改善すべきなのでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

python

1 data = data.reshape(1,6,10) 2 image_list.append(data) 3 4 label_list.append(label) 5 6 7# kerasに渡すためにnumpy配列に変換。 8image_list = np.array(image_list) 9label_list = np.array(label_list) 10 11image_list = image_list.reshape(-1,60) 12image_list = image_list.astype('float32') 13 14# kerasに渡すためにnumpy配列に変換。 15image_list = np.array(image_list) 16 17 18X_train, X_test, y_train, y_test = train_test_split(image_list, label_list, test_size=0.1, random_state=0) 19 20 21# ラベルデータをone-hotベクトルに直す 22y_train = keras.utils.np_utils.to_categorical(y_train.astype('int32'),5) 23y_test = keras.utils.np_utils.to_categorical(y_test.astype('int32'),5) 24 25 26# 入力と出力を指定 27in_size = 30*2 28out_size = 5 29 30# モデル構造を定義 31Dense = keras.layers.Dense 32model = keras.models.Sequential() 33model.add(Dense(512, activation='relu', input_shape=(in_size,))) 34model.add(Dense(out_size, activation='softmax')) 35 36# モデルを構築 37model.compile( 38 loss='categorical_crossentropy', 39 optimizer='adam', 40 metrics=['accuracy']) 41 42# 学習を実行 43model.fit(X_train, y_train, 44 batch_size=64, epochs=20) 45 46# モデルを評価 47score = model.evaluate(X_test, y_test, verbose=1) 48print('正解率=', score[1], 'loss=', score[0]) 49

for分の中身をこのようにして、
60の一次元配列に変換しました。

このようにするとうまく学習することができました。

データの型変換に問題があったようです。

投稿2018/12/16 05:04

meJ15

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問