前提・実現したいこと
pythonで"ディープラーニングを使用して「あなたにそっくりな女優判別プログラム」を作ったおはなし"
リンク:https://qiita.com/k_eita/items/a50a4cae0aa2598422e4
というものを参考にしてシステムを作成しています。
numpyファイルを読み込もうとしていたら以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
2021-07-25 12:20:23.131227: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations: AVX AVX2 To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. (0,) Traceback (most recent call last): File "c:/Users/Owner/Documents/anaconda_vs/appale_project/use_cnn.py", line 97, in <module> main() File "c:/Users/Owner/Documents/anaconda_vs/appale_project/use_cnn.py", line 37, in main model = model_train(X_train, Y_train, X_val, Y_val) File "c:/Users/Owner/Documents/anaconda_vs/appale_project/use_cnn.py", line 45, in model_train model.add(Conv2D(32, (3, 3), padding = 'same', input_shape = X.shape[1:])) File "C:\Users\Owner\anaconda3\envs\cnn_env\lib\site-packages\tensorflow\python\training\tracking\base.py", line 457, in _method_wrapper result = method(self, *args, **kwargs) File "C:\Users\Owner\anaconda3\envs\cnn_env\lib\site-packages\tensorflow\python\keras\engine\sequential.py", line 206, in add layer(x) File "C:\Users\Owner\anaconda3\envs\cnn_env\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 926, in __call__ input_list) File "C:\Users\Owner\anaconda3\envs\cnn_env\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 1092, in _functional_construction_call input_spec.assert_input_compatibility(self.input_spec, inputs, self.name) File "C:\Users\Owner\anaconda3\envs\cnn_env\lib\site-packages\tensorflow\python\keras\engine\input_spec.py", line 196, in assert_input_compatibility str(x.shape.as_list())) ValueError: Input 0 of layer conv2d is incompatible with the layer: : expected min_ndim=4, found ndim=1. Full shape received: [None]
該当のソースコード
python
1from inspect import CORO_SUSPENDED 2from re import escape 3import numpy as np 4import matplotlib.pyplot as plt 5import keras 6from keras.models import Sequential 7from keras.layers import Conv2D, MaxPooling2D 8from keras.layers import Activation, Dropout, Flatten, Dense 9from keras.utils import np_utils 10from keras.utils import plot_model 11import os 12 13#numpyファイルの読み込み 14in_npy = "appale_rgb.npy" 15 16#出力するモデル名を指定 17out_model = "appale_out.h5" 18 19#CNN設定 20CATEGORY_NUM = 5 21BATCH_SIZE = 32 22EPOCHS = 15 23LEARNING_RATE = 0.0001 24 25def main(): 26 #画像データの読み込み 27 X_train, X_val, Y_train, Y_val = np.load(in_npy) 28 #正規化を行う(最大値:256で割って0~1に収束) 29 X_train = X_train.astype("float")/ 256 30 X_val = X_val.astype("float") / 256 31 #ラベルをベクトルに変換 32 Y_train = np_utils.to_categorical(Y_train, CATEGORY_NUM) 33 Y_val = np_utils.to_categorical(Y_val, CATEGORY_NUM) 34 35 #学習の実行 36 model = model_train(X_train, Y_train, X_val, Y_val) 37 38def model_train(X, Y, Xv, Yv): 39 #モデルの定義 40 model = Sequential() 41 42 print(X.shape) 43 44 model.add(Conv2D(32, (3, 3), padding = 'same', input_shape = X.shape[1:])) 45 model.add(Activation('relu')) 46 47 model.add(Conv2D(32, (3, 3))) 48 model.add(Activation('relu')) 49 model.add(MaxPooling2D(pool_size = (2, 2))) 50 model.add(Dropout(0.25)) 51 52 model.add(Conv2D(64, (3, 3), padding = 'same')) 53 model.add(Activation('relu')) 54 55 model.add(Conv2D(64, (3, 3))) 56 model.add(Activation('relu')) 57 model.add(MaxPooling2D(pool_size = (2, 2))) 58 model.add(Dropout(0.25)) 59 60 model.add(Flatten()) 61 62 model.add(Dense(512)) 63 model.add(Activation('relu')) 64 model.add(Dropout(0.5)) 65 model.add(Dense(CATEGORY_NUM)) 66 model.add(Activation('softmax')) 67 68 #モデルの可視化 69 plot_model(model, to_file='model_' + str(EPOCHS) +'.png') 70 71 #最適化処理 72 opt = keras.optimizers.rmsprop(lr = LEARNING_RATE, decay = 1e-6) 73 74 #モデル最適化の宣言 75 model.compile(loss= 'categorical_crossenttopy', optimizer = opt, metrics = ['accuracy']) 76 77 #学習 78 result = model.fit(X, Y, batch_size = BATCH_SIZE, epochs = EPOCHS, validation_data = (Xv, Yv)) 79 80 #モデルデータの保存 81 model.save('./ + out_model') 82 83 #グラフ表示 84 plt.plot(range(1, EPOCHS + 1), result.history['acc'], label = "train-acc") 85 plt.plot(range(1, EPOCHS + 1), result.history['loss'], label = "train-loss") 86 plt.plot(range(1, EPOCHS + 1), result.history['val_loss'], label = "val-loss") 87 plt.title(out_model) 88 plt.xlabel('Epochs') 89 plt.ylabel('Accuracy') 90 plt.legend() 91 plt.show() 92 93 return model 94 95if __name__ == "__main__": 96 main() 97
試したこと
・print(X.shape)と入力し、中身を確認 結果:(0,)
・try-exeptによりエラー場所の確認 結果:model_train関数内、最初のConv2d
補足情報(FW/ツールのバージョンなど)
・Python3.7.10 64bit
・仮想環境 anaconda3
・keras 2.4.3
・tensorflow 2.3.0
・matplotlib 3.3.4
回答1件
あなたの回答
tips
プレビュー