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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

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

深層学習

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

0回答

776閲覧

Google ColaboratoryとJupyter上での深層学習の結果の違いについて

T_Taji

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

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

深層学習

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2021/05/13 10:30

初めて質問させていただきます。
私はPythonで画像に関する深層学習を勉強も兼ねて初心者なりに行っている者なのですが、その実行結果についてわからないことがあり、今回こちらで質問いたしました。
ご教授頂けますと幸いです、どうぞよろしくお願いいたします。

私は現在、画面一番下のソースコードを使用し、Google ColaboratoryとJupyter上で深層学習を動かしているのですが、
それぞれの環境で学習した2つのモデルが、恐らく全く異なったものになっているといった問題が起きています。

具体的には、ealry stoppingも使用し、各々モデルの学習を進めた際の抜粋した段階的な結果が、以下のようになっております。

Google Colaboratoryの場合:

Epoch 1/100
3/3 [===========] - 23s 6s/step - loss: 3.8230 - accuracy: 0.4375 - val_loss: 2.6128 - val_accuracy: 0.5000
Epoch 2/100
3/3 [===========] - 17s 5s/step - loss: 2.6188 - accuracy: 0.4741 - val_loss: 1.0412 - val_accuracy: 0.5000
...
Epoch 69/100
3/3 [===========] - 17s 5s/step - loss: 0.2823 - accuracy: 0.9120 - val_loss: 0.4176 - val_accuracy: 0.7833
Epoch 70/100
3/3 [===========] - 17s 5s/step - loss: 0.2613 - accuracy: 0.9159 - val_loss: 0.5028 - val_accuracy: 0.8000
Epoch 71/100
3/3 [===========] - 17s 5s/step - loss: 0.2283 - accuracy: 0.9517 - val_loss: 0.4454 - val_accuracy: 0.7333
Epoch 00071: early stopping

Jupyterの場合:

Epoch 1/100
4/3 [===========] - 28s 7s/step - loss: 1.5470 - accuracy: 0.5333 - val_loss: 0.7188 - val_accuracy: 0.4667
Epoch 2/100
4/3 [===========] - 17s 4s/step - loss: 0.6885 - accuracy: 0.5750 - val_loss: 0.7233 - val_accuracy: 0.5167
...
Epoch 16/100
4/3 [===========] - 18s 5s/step - loss: 0.3899 - accuracy: 0.8833 - val_loss: 1.0496 - val_accuracy: 0.5167
Epoch 17/100
4/3 [===========] - 18s 5s/step - loss: 0.4316 - accuracy: 0.8083 - val_loss: 0.7981 - val_accuracy: 0.5033
Epoch 18/100
4/3 [===========] - 17s 4s/step - loss: 0.4079 - accuracy: 0.8083 - val_loss: 1.3481 - val_accuracy: 0.5167
Epoch 00018: early stopping

このように特にJupyter上で深層学習を実行した際に、恐らく検証データについて学習が進んでいないのではという問題が生じております。
実際にテストデータを用いて実装モデルの実験を行ったのですが、Jupyterの場合、2クラスに分類したいにも関わらず、学習ができていないためか、一方のクラスにしか予測できないといった結果になりました。

使用しているJupyterの実行環境は、
Google Colaboratoryを動作させている同じCent OS7上で、Python3とJupyterをインストールしたものになっております。
その他の基本的な設定としましては、起動に当たっての最低限のもの以外は特に変更しておりません。

ここまで読んでいただきありがとうございます。
もし上記の問題について、原因や設定の改善点等、お気づきの方がいらっしゃいましたら、お手数おかけいたしますがアドバイス頂けると幸いです。
どうぞよろしくお願いいたします。

使用しているソースコード:(データの参照方法以外は、Google Colaboratory・Jupyter共に以下の同じコードを使用しております。)

python

1import keras 2from keras.layers import Dense, Dropout, InputLayer 3from keras.optimizers import Adam 4import glob 5import argparse 6from PIL import Image 7import numpy as np 8from keras.utils import np_utils 9import os 10import json 11from keras.preprocessing.image import ImageDataGenerator 12from keras.callbacks import ModelCheckpoint 13from keras.callbacks import EarlyStopping 14 15 16#データのロード 17 18import numpy as np 19import glob 20from PIL import Image 21from keras.utils import np_utils 22 23def loaddata(datadir,phase,size,c): 24 if phase == "train": 25 traindir = datadir + "/train/*" 26 valdir = datadir + "/val/*" 27 trainlists = glob.glob(traindir) 28 vallists = glob.glob(valdir) 29 Xtrain = [] 30 Ytrain = [] 31 Xval = [] 32 Yval = [] 33 print(trainlists) 34 35 for i, trainlist in enumerate(trainlists): 36 picturelists = glob.glob(trainlist + "/*") 37 for picturelist in picturelists: 38 img = Image.open(picturelist) 39 data = np.asarray(img) 40 Xtrain.append(data) 41 Ytrain.append(i) 42 Xtrain = np.array(Xtrain) 43 Ytrain = np.array(Ytrain) 44 Xtrain = Xtrain.astype("float32") 45 Xtrain = Xtrain / 255.0 46 Ytrain = np_utils.to_categorical(Ytrain, len(trainlists)) 47 48 for i, vallist in enumerate(vallists): 49 picturelists = glob.glob(vallist + "/*") 50 for picturelist in picturelists: 51 img = Image.open(picturelist) 52 data = np.asarray(img) 53 Xval.append(data) 54 Yval.append(i) 55 Xval = np.array(Xval) 56 Yval = np.array(Yval) 57 Xval = Xval.astype("float32") 58 Xval = Xval / 255.0 59 Yval = np_utils.to_categorical(Yval,len(vallists)) 60 return Xtrain, Ytrain, Xval, Yval 61 else: 62 testdir = datadir + "/test/*" 63 testlists = glob.glob(testdir) 64 Xtest = [] 65 Ytest = [] 66 for i, testlist in enumerate(testlists): 67 picturelists = glob.glob(testlist + "/*") 68 for picturelist in picturelists: 69 img = Image.open(picturelist) 70 data = np.asarray(img) 71 Xtest.append(data) 72 Ytest.append(i) 73 Xtest = np.array(Xtest) 74 Ytest = np.array(Ytest) 75 Xtest = Xtest.astype("float32") 76 Xtest = Xtest / 255.0 77 Ytest = np_utils.to_categorical(Ytest, len(testlists)) 78 return Xtest, Ytest 79 80 81#lossとAccを描画する関数 82 83import matplotlib.pyplot as plt 84 85def plot_history_loss(fit, modelname): 86 plt.plot(fit.history['loss'],label="loss for training") 87 plt.plot(fit.history['val_loss'],label="loss for validation") 88 plt.title('model loss') 89 plt.xlabel('epoch') 90 plt.ylabel('loss') 91 plt.legend(loc='upper right') 92 plt.grid(which="both") 93 plt.close() 94 95def plot_history_acc(fit, modelname): 96 plt.plot(fit.history['acc'],label="accuracy for training") 97 plt.plot(fit.history['val_acc'],label="accuracy for validation") 98 plt.title('model accuracy') 99 plt.xlabel('epoch') 100 plt.ylabel('accuracy') 101 plt.legend(loc='lower right') 102 plt.grid(which="both") 103 plt.close() 104 105 106# モデルを定義する関数(今回はInceptionV3モデルを使用) 107 108from keras.models import Sequential 109from keras.layers.convolutional import Conv2D 110from keras.layers.pooling import MaxPool2D 111from keras.layers.core import Dense, Activation, Dropout, Flatten 112from keras.layers import GlobalAveragePooling2D 113from keras.applications import VGG16, InceptionV3 114from keras import models 115 116def modelInceptionV3(inputh, inputw, c, nb_classes): 117 vgg = InceptionV3(weights="imagenet",include_top=False, 118 input_shape=(inputh, inputw, c)) 119 last = vgg.output 120 model = GlobalAveragePooling2D()(last) 121 #model = Flatten()(last) 122 model = Dense(1024, activation="relu")(model) 123 #model = Dropout(0.5)(model) 124 preds = Dense(nb_classes, activation="softmax")(model) 125 126 returnmodel = models.Model(vgg.input, preds) 127 for layer in vgg.layers: 128 layer.trainable = False 129 #print(returnmodel.summary()) 130 return returnmodel 131 132 133# main関数 134 135if __name__ == '__main__': 136 dirname = "face1" 137 phase = "train" 138 picsize = 256 139 chanel = 3 140 numcategory = 2 141 epoch = 100 142 batch = 32 143 opt = "Adam" 144 name = "train" 145 rotation = 3 146 width_shift = 0.01 147 height_shift = 0.01 148 149 if phase == "train": 150 #os.mkdir("./"+name) 151 Xtrain, Ytrain, Xval, Yval = loaddata(dirname, phase, picsize, chanel) 152 early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1) 153 datagen = ImageDataGenerator(rescale=1.0 / 255, rotation_range=rotation, 154 width_shift_range=width_shift, 155 height_shift_range=height_shift, 156 horizontal_flip=True) 157 test_datagen = ImageDataGenerator(rescale=1.0 / 255) 158 datagen.fit(Xtrain) 159 print(len(Xtrain)) 160 train_generator = datagen.flow_from_directory(dirname+'/train', 161 target_size=(picsize, picsize), 162 batch_size=batch, 163 class_mode='categorical',classes=['0', '1'], 164 shuffle=True, color_mode='rgb') 165 val_generator = test_datagen.flow_from_directory(dirname+'/val', 166 target_size=(picsize, picsize), 167 batch_size=batch, 168 class_mode='categorical',classes=['0', '1'], 169 shuffle=True, color_mode='rgb') 170 model = modelInceptionV3(picsize, picsize, chanel, numcategory) 171 model.compile(loss="categorical_crossentropy", 172 optimizer='adam', 173 metrics=['accuracy']) 174 cp = ModelCheckpoint(filepath=name+"/weights{epoch:04d}.h5", 175 monitor='val_loss', 176 verbose=1, 177 save_best_only=True, 178 save_weights_only=True, 179 mode="min", 180 period=1) 181 modelhistory = model.fit_generator(train_generator, steps_per_epoch=len(Xtrain)/batch, epochs=epoch, verbose=1, 182 validation_data=val_generator, validation_steps=len(Xval)/batch, callbacks=[early_stopping],) 183 plot_history_loss(modelhistory, name) 184 with open(name+"/history.json","w") as f: 185 json.dump(modelhistory.history, f) 186 model.save_weights('param.hdf5') 187 else: 188 Xtest, Ytest = loaddata(dirname, phase) 189 print(Xtest[0]) 190 191 192# ~ モデルの学習後 〜 193# モデルのテスト: 194 195import glob 196p = glob.glob(dirname + "/test/1/*.png") 197#print(p) 198cnt = 0 199for i in p: 200 img = Image.open(i) 201 data = np.asarray(img) 202 data = np.resize(data, (1, 256, 256, 3)).astype("float32") 203 data = data / 255.0 204 predictions = model.predict(data) 205 #print(predictions) 206 print(str(np.argmax(max(predictions)))+":"+str(max(max(predictions)))) 207 if np.argmax(max(predictions)) == 1: 208 cnt += 1 209print(str(cnt)+"/"+str(len(p)))

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

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

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

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

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

toast-uz

2021/05/13 11:49

Pythonおよびインポートしている各種ライブラリのバージョンを確認しましょう。 Ptyhon3です、ではなく、3.xのxが重要です。各種ライブラリはできればマイナーバージョンまであわせてみましょう。さらに互換性を気にされるなら生kerasは使わない方が良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問