前提
ディープラーニングの学習を始めようと考え、インターネットでプログラムを拾い、実行できるか確認しているところです。
実現したいこと
プログラムを走らせると Epoch 1/5 が表示され一時停止、数秒後に
「Process finished with exit code -1073740791 (0xC0000409)」
が表示されプログラムが停止してしまいます。
このエラーについて調べたのですが私の知識が乏しく理解できる対処法が見当たらなかったため、よろしければアドバイスをいただければと考えております。
プログラミングの学習を始めてたばかりの初心者なので、無茶苦茶なプログラムになっているかもしれませんがご容赦ください。
また、解決に必要な情報がありましたら教えていただければ幸いです。
発生している問題・エラーメッセージ
Process finished with exit code -1073740791 (0xC0000409)
該当のソースコード
#1 ライブラリのインポート等 import keras import glob import numpy as np import tensorflow as tf from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Dense, Dropout, Flatten #from keras.utils import plot_model #これはKerasのバージョンなどにより使えないのでコメントアウト from keras.utils import np_utils #keras.utils.to_categoricalでエラーが出るので追加 # from keras.optimizers import Adam # ここでエラーとなるので以下のコードに変更 import matplotlib.pyplot as plt import time #2 各種設定 train_data_path = 'C:/Users/my/PycharmProjects/pythonProject2/image' # ここを変更。Colaboratoryにアップロードしたzipファイルを解凍後の、データセットのフォルダ名を入力 image_size = 28 # ここを変更。必要に応じて変更してください。「28」を指定した場合、縦28横28ピクセルの画像に変換します。 color_setting = 1 #ここを変更。データセット画像のカラー:「1」はモノクロ・グレースケール。「3」はカラー。 folder = ['yakiimo', 'yakisoba', 'yakitori'] # ここを変更。データセット画像のフォルダ名(クラス名)を半角英数で入力 class_number = len(folder) print('今回のデータで分類するクラス数は「', str(class_number), '」です。') #3 データセットの読み込みとデータ形式の設定・正規化・分割 X_image = [] Y_label = [] for index, name in enumerate(folder): read_data = train_data_path + '/' + name files = glob.glob(read_data + '/*.jpg') #ここを変更。png形式のファイルを利用する場合のサンプルです。 print('--- 読み込んだデータセットは', read_data, 'です。') for i, file in enumerate(files): if color_setting == 1: img = tf.keras.preprocessing.image.load_img(file, color_mode = 'grayscale' ,target_size=(image_size, image_size)) elif color_setting == 3: img = tf.keras.preprocessing.image.load_img(file, color_mode = 'rgb' ,target_size=(image_size, image_size)) array = tf.keras.preprocessing.image.img_to_array(img) X_image.append(array) Y_label.append(index) X_image = np.array(X_image) Y_label = np.array(Y_label) X_image = X_image.astype('float32') / 255 #Y_label = keras.utils.to_categorical(Y_label, class_number) #Kerasのバージョンなどにより使えないのでコメントアウト Y_label = np_utils.to_categorical(Y_label, class_number) #上記のコードのかわり train_images, valid_images, train_labels, valid_labels = train_test_split(X_image, Y_label, test_size=0.10) x_train = train_images y_train = train_labels x_test = valid_images y_test = valid_labels #4 機械学習(人工知能)モデルの作成 – 畳み込みニューラルネットワーク(CNN)・学習の実行等 model = Sequential() model.add(Conv2D(16, (3, 3), padding='same', input_shape=(image_size, image_size, color_setting), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(128, (3, 3), padding='same', activation='relu')) model.add(Conv2D(256, (3, 3), padding='same', activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.25)) model.add(Dense(class_number, activation='softmax')) model.summary() #plot_model(model, to_file='model.png') #ここはKerasのバージョンなどにより使えないのでコメントアウト model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy']) start_time = time.time() # ここを変更。必要に応じて「batch_size=」「epochs=」の数字を変更してみてください。 history = model.fit(x_train,y_train, batch_size=2, epochs=5, verbose=1, validation_data=(x_test, y_test)) plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy']) plt.title('Model accuracy') plt.ylabel('Accuracy') plt.xlabel('Epoch') plt.grid() plt.legend(['Train', 'Validation'], loc='upper left') plt.show() plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.grid() plt.legend(['Train', 'Validation'], loc='upper left') plt.show() open('cnn_model.json','w').write(model.to_json()) model.save_weights('cnn_weights.h5') #model.save('cnn_model_weight.h5') #モデル構造と重みを1つにまとめることもできます score = model.evaluate(x_test, y_test, verbose=0) print('Loss:', score[0], '(損失関数値 - 0に近いほど正解に近い)') print('Accuracy:', score[1] * 100, '%', '(精度 - 100% に近いほど正解に近い)') print('Computation time(計算時間):{0:.3f} sec(秒)'.format(time.time() - start_time))
回答1件
あなたの回答
tips
プレビュー