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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

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

受付中

CNNの学習が上がらない原因を見つけたい

Fdoragon
Fdoragon

総合スコア0

Jupyter

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

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

1回答

0評価

0クリップ

141閲覧

投稿2018/10/18 14:00

前提・実現したいこと

ubuntuのjupyter notebook上でpythonを用いて畳み込みニューラルネットワーク(CNN)を使って"寿司"、"サラダ"、"麻婆豆腐"を見分けるプログラムを作る。

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

エラーなく実行できたのですが、学習状況を表すグラフが横ばいで全く変化しません。

該当のソースコード

python

import cnn_model #cnn_modelは下記のcnn_model.pyからインポートする import keras import matplotlib.pyplot as plt import numpy as np from sklearn.model_selection import train_test_split import cv2 #入力と出力を指定 im_rows = 32 #画像の縦ピクセル im_cols = 32 #画像の横ピクセル im_color = 3 #画像の色空間 in_shape = (im_rows, im_cols, im_color) nb_classes = 3 #写真データを読み込み photos = np.load('image/photos.npz') x = photos['x'] y = photos['y'] #読み込んだデータの三次元配列に変換 x = x.reshape(-1, im_rows, im_cols, im_color) x = x.astype('float32')/255 #ラベルデータをone-hotベクトルに直す y = keras.utils.np_utils.to_categorical(y.astype('int32'),nb_classes) #学習用とテスト用に分ける x_train, x_test, y_train, y_test = train_test_split( x, y, train_size=0.8) # 学習用データの水増し x_new = [] y_new = [] for i, xi in enumerate(x_train): yi = y_train[i] for ang in range(-30, 30, 5): #回転させる center = (16, 16) mtx = cv2.getRotationMatrix2D(center, ang, 1.0) xi2 = cv2.warpAffine(xi, mtx, (32, 32)) x_new.append(xi2) y_new.append(yi) #更に左右反転させる xi3 = cv2.flip(xi2, 1) x_new.append(xi3) y_new.append(yi) #水増しした画像を学習用に置き換える print('水増し前=',len(y_train)) x_train = np.array(x_new) y_train = np.array(y_new) print('水増し後=',len(y_train)) #CNNモデルを取得 model = cnn_model.get_model(in_shape, nb_classes) #学習を実行 hist = model.fit(x_train, y_train, batch_size=10, epochs=5, verbose=1, validation_data=(x_test, y_test)) #モデルを評価 score = model.evaluate(x_test,y_test,verbose=1) print('正解率=', score[1], 'loss=', score[0]) #学習の様子をグラフへ描画 #正解率の推移をプロット plt.plot(hist.history['acc']) plt.plot(hist.history['val_acc']) plt.title('Accuracy') plt.legend(['train','test'],loc='upper left') plt.show() #ロスの推移をプロット plt.plot(hist.history['loss']) plt.plot(hist.history['val_loss']) plt.title('Loss') plt.legend(['train','test'],loc='upper left') plt.show() model.save_weights('./image/photos-model-light.hdf5') #####################################cnn_model.py############################################ import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.optimizers import RMSprop #CNNのモデルを定義する def def_model(in_shape, nb_classes): model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=in_shape)) model.add(Conv2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(nb_classes, activation='softmax')) return model #コンパイル済のCNNモデルを返す def get_model(in_shape, nb_classes): model = def_model(in_shape, nb_classes) model.compile( loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) return model

イメージ説明

試したこと

batchサイズの変更、トレーニング用の画像を再取得、トレーニング用の画像の水増し(約5000枚)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

tiitoi
tiitoi

2018/10/18 14:03 編集

学習は fine-tuning ではなく、フルスクラッチで \(1から学習すること\) やっていますか?
Fdoragon
Fdoragon

2018/10/19 13:09

はい、1からの学習です。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Jupyter

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

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