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

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

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

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

深層学習

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1747閲覧

<keras>バリューエラーが解決できない

TakaKan

総合スコア10

Keras

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

深層学習

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/02/14 02:21

前提・実現したいこと

以前学習させたものの正解率が低かったため、画像の反転やズームなどによって学習データを水増しさせたいのですが、以下のようなエラーが出てしまいます。
エラーを解決して学習を開始したいです!

よろしくお願いいたします。

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

ValueError: Error when checking target: expected sequential_1 to have shape (4,) but got array with shape (1,)

該当のソースコード

Python

1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3""" 4Created on Fri Feb 7 22:12:26 2020 5 6@author: kanta 7""" 8 9import os 10from keras.applications.vgg16 import VGG16 11from keras.preprocessing.image import ImageDataGenerator 12from keras.models import Sequential, Model 13from keras.layers import Input, Activation, Dropout, Flatten, Dense 14from keras.preprocessing.image import ImageDataGenerator 15from keras import optimizers 16import numpy as np 17import time 18 19# 分類するクラス 20classes = ['arin', 'kanako', 'reni', 'shiori'] 21nb_classes = len(classes) 22 23IMG_HEIGHT = 150 24IMG_WIDTH = 150 25 26 27# トレーニング用とバリデーション用の画像格納先 28train_data_dir = '/dataset/train' 29validation_data_dir = '/dataset/validation' 30 31 32nb_train_samples = 24446 33nb_validation_samples = 389 34 35batch_size = 16 36nb_epoch = 20 37 38result_dir = 'results' 39if not os.path.exists(result_dir): 40 os.mkdir(result_dir) 41 42 43def vgg_model_maker(): 44 """ VGG16のモデルをFC層以外使用。FC層のみ作成して結合して用意する """ 45 46 # VGG16のロード。FC層は不要なので include_top=False 47 input_tensor = Input(shape=(IMG_WIDTH, IMG_HEIGHT, 3)) 48 vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor) 49 50 # FC層の作成 51 top_model = Sequential() 52 top_model.add(Flatten(input_shape=vgg16.output_shape[1:])) 53 top_model.add(Dense(256, activation='relu')) 54 top_model.add(Dropout(0.5)) 55 top_model.add(Dense(nb_classes, activation='softmax')) 56 57 # VGG16とFC層を結合してモデルを作成 58 model = Model(input=vgg16.input, output=top_model(vgg16.output)) 59 60 return model 61 62 63def image_generator(): 64 """ ディレクトリ内の画像を読み込んでトレーニングデータとバリデーションデータの作成 """ 65 train_datagen = ImageDataGenerator( 66 rescale=1./255, 67 rotation_range=45, 68 width_shift_range=.15, 69 height_shift_range=.15, 70 horizontal_flip=True, 71 zoom_range=0.5 72 ) 73 74 validation_datagen = ImageDataGenerator(rescale=1./255) 75 76 train_generator = train_datagen.flow_from_directory(batch_size=batch_size, 77 directory=train_data_dir, 78 shuffle=True, 79 target_size=(IMG_HEIGHT, IMG_WIDTH), 80 class_mode='binary',) 81 82 83 84 85 """ 86 rescale=1./255, 87 rotation_range=45, 88 width_shift_range=.15, 89 height_shift_range=.15, 90 horizontal_flip=True, 91 zoom_range=0.5 92 93 train_data_gen = image_gen_train.flow_from_directory(batch_size=batch_size, 94 directory=train_dir, 95 shuffle=True, 96 target_size=(IMG_HEIGHT, IMG_WIDTH), 97 class_mode='binary') 98 """ 99 100 validation_generator = validation_datagen.flow_from_directory( 101 validation_data_dir, 102 target_size=(IMG_WIDTH, IMG_HEIGHT), 103 color_mode='rgb', 104 classes=classes, 105 class_mode='categorical', 106 batch_size=batch_size, 107 shuffle=True) 108 109 return (train_generator, validation_generator) 110 111 112if __name__ == '__main__': 113 start = time.time() 114 115 # モデル作成 116 vgg_model = vgg_model_maker() 117 118 # 最後のconv層の直前までの層をfreeze 119 for layer in vgg_model.layers[:15]: 120 layer.trainable = False 121 122 # 多クラス分類を指定 123 vgg_model.compile(loss='categorical_crossentropy', 124 optimizer=optimizers.SGD(lr=1e-3, momentum=0.9), 125 metrics=['accuracy']) 126 127 # 画像のジェネレータ生成 128 train_generator, validation_generator = image_generator() 129 130 # Fine-tuning 131 history = vgg_model.fit_generator( 132 train_generator, 133 samples_per_epoch=nb_train_samples, 134 nb_epoch=nb_epoch, 135 validation_data=validation_generator, 136 nb_val_samples=nb_validation_samples) 137 138 vgg_model.save(os.path.join(result_dir, 'finetuning new.h5')) 139 140 process_time = (time.time() - start) / 60 141 print(u'学習終了。かかった時間は', process_time, u'分です。')

試したこと

ネットで検索をしたところ、配列に与える値の数が間違っていることはわかったのですが、初心者なため、具体的にどこを変更したら良いのかわかりませんでした...

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

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

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

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

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

guest

回答1

0

ベストアンサー

学習データのclass_modeが'binary'になっています。

投稿2020/02/17 02:37

編集2020/02/17 04:28
kome_as

総合スコア66

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問