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

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

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

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

機械学習

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

Python

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

Q&A

0回答

806閲覧

conv2dにおいて二次元配列を四次元配列にして入力する方法

circleAI

総合スコア4

Keras

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2019/11/01 07:18

http://tecsingularity.com/tensorflow/keras_alexnet/
上記のサイトのソースコードを実行しようと思ったところ以下のエラーメッセージが表示されました。調べてみたのですが解決方法がわかりません。
conv2dが四次元配列で入力することが要求されていているが、二次元配列が入力されているということは認識しています。しかしどのように解決すればいいかがわからないので教えていただければと思います。

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

ValueError Traceback (most recent call last) <ipython-input-6-925a61bfcbcd> in <module> 129 130 # 訓練 --> 131 history = model.fit(train_images, train_labels, batch_size=BATCH_SIZE, epochs=EPOCH_NUM) 132 133 ~\Anaconda3\envs\dls\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs) 950 sample_weight=sample_weight, 951 class_weight=class_weight, --> 952 batch_size=batch_size) 953 # Prepare validation data. 954 do_validation = False ~\Anaconda3\envs\dls\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size) 749 feed_input_shapes, 750 check_batch_axis=False, # Don't enforce the batch size. --> 751 exception_prefix='input') 752 753 if y is not None: ~\Anaconda3\envs\dls\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 126 ': expected ' + names[i] + ' to have ' + 127 str(len(shape)) + ' dimensions, but got array ' --> 128 'with shape ' + str(data_shape)) 129 if not check_batch_axis: 130 data_shape = data_shape[1:] ValueError: Error when checking input: expected conv2d_11_input to have 4 dimensions, but got array with shape (0, 1)

該当のソースコード

import numpy as np import keras from keras.utils import np_utils from keras.models import Sequential from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.layers.core import Dense, Dropout, Activation, Flatten from sklearn.model_selection import train_test_split from PIL import Image import glob from keras.preprocessing.image import load_img, img_to_array from keras.initializers import TruncatedNormal, Constant from keras.layers import Input, Dropout, Flatten, Conv2D, MaxPooling2D, Dense, Activation, BatchNormalization from keras.optimizers import SGD # GrayScaleのときに1、COLORのときに3にする COLOR_CHANNEL = 1 # 入力画像サイズ(画像サイズは正方形とする) INPUT_IMAGE_SIZE = 224 # 訓練時のバッチサイズとエポック数 BATCH_SIZE = 32 EPOCH_NUM = 3 # 使用する訓練画像の入ったフォルダ(ルート) TRAIN_PATH = "..\test" # 使用する訓練画像の各クラスのフォルダ名 folder = ["000_hatsune_miku", "001_kinomoto_sakura", "002_suzumiya_haruhi", "003_fate_testarossa", "004_takamachi_nanoha", "005_lelouch_lamperouge", "006_akiyama_mio", "007_nagato_yuki", "008_shana", "009_hakurei_reimu"] # CLASS数を取得する CLASS_NUM = len(folder) print("クラス数 : " + str(CLASS_NUM)) # 各フォルダの画像を読み込む v_image = [] v_label = [] for index, name in enumerate(folder): dir = TRAIN_PATH + "\" + name files = glob.glob(dir + "\*.png") print(dir) for i, file in enumerate(files): if COLOR_CHANNEL == 1: img = load_img(file, color_mode = "grayscale", target_size=(INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE)) elif COLOR_CHANNEL == 3: img = load_img(file, color_mode = "rgb", target_size=(INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE)) array = img_to_array(img) v_image.append(array) v_label.append(index) v_image = np.array(v_image) v_label = np.array(v_label) # imageの画素値をint型からfloat型にする v_image = v_image.astype('float32') # 画素値を[0~255]⇒[0~1]とする v_image = v_image / 255.0 # 正解ラベルの形式を変換 v_label = np_utils.to_categorical(v_label, CLASS_NUM) # 学習用データと検証用データに分割する train_images, valid_images, train_labels, valid_labels = train_test_split(v_image, v_label, test_size=0.20) def conv2d(filters, kernel_size, strides=1, bias_init=1, **kwargs): trunc = TruncatedNormal(mean=0.0, stddev=0.01) cnst = Constant(value=bias_init) return Conv2D( filters, kernel_size, strides=strides, padding='same', activation='relu', kernel_initializer=trunc, bias_initializer=cnst, **kwargs ) def dense(units, **kwargs): trunc = TruncatedNormal(mean=0.0, stddev=0.01) cnst = Constant(value=1) return Dense( units, activation='tanh', kernel_initializer=trunc, bias_initializer=cnst, **kwargs ) def AlexNet(): model = Sequential() # 第1畳み込み層 model.add(conv2d(96, 11, strides=(4,4), bias_init=0, input_shape=(INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE, COLOR_CHANNEL))) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 第2畳み込み層 model.add(conv2d(256, 5, bias_init=1)) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 第3~5畳み込み層 model.add(conv2d(384, 3, bias_init=0)) model.add(conv2d(384, 3, bias_init=1)) model.add(conv2d(256, 3, bias_init=1)) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 全結合層 model.add(Flatten()) model.add(dense(4096)) model.add(Dropout(0.5)) model.add(dense(4096)) model.add(Dropout(0.5)) # 出力層 model.add(Dense(CLASS_NUM, activation='softmax')) model.compile(optimizer=SGD(lr=0.01), loss='categorical_crossentropy', metrics=['accuracy']) return model # コンパイル model = AlexNet() # 訓練 history = model.fit(train_images, train_labels, batch_size=BATCH_SIZE, epochs=EPOCH_NUM) # モデル構成の確認 model.summary() score = model.evaluate(valid_images, valid_labels, verbose=0) print(len(valid_images)) print('Loss:', score[0]) print('Accuracy:', score[1])

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問