前提・実現したいこと
deep_learningを用いて、ある製品の測定値の予測をしたいと思っています。
測定値の取得には多くの時間がかかるため、これを解決したいです。
・製品の外観写真
・製品の測定値
の組み合わせを学習させることで、製品の外観写真があれば測定を行うことなく、
製品の測定値を得られるようになるのが理想です。
発生している問題・エラーメッセージ
なんとかデータを集め、
・製品の外観写真 × 1536枚(うち1530枚を学習用、残り6枚が検証用)
・製品の測定値 × 1356個(うち1530個が学習用、残り6個が検証用)
上記のデータを学習させてみましたが
①エポックを増やしていっても損失が減らない
②predict()にどの写真を入れても同じ結果が返ってくる(array([[1.]],dtype=foat32))
といった状況になり困っています。
①に関しては勉強不足だと思うのですが、②に関してはどこか致命的なミスがあるのではないかと思っています。
コーディング自体まだおぼつかない状態で申し訳ないのですが、ご教示いただければと存じます。
該当のソースコード
%matplotlib inline import numpy as np import matplotlib.pyplot as plt import pandas as pd import os import glob import tifffile import tqdm import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation, Flatten from keras.utils import np_utils from keras.layers import Conv2D, MaxPooling2D from keras import backend as K pic_dir = r'C:\Users\Public\Documents\Python Scripts\pic\01' #外観写真1356枚 data_dir = r'C:\Users\Public\Documents\Python Scripts\data\data.csv' #測定値1536個の保管場所 #測定値 data_plc = pd.read_csv(data_dir) data = data_plc.iloc[1:,0] #1536個の測定値を抜き出す data_array = np.array(data,dtype=float) #maxで1.283、minで-0.27程度です #外観写真 os.chdir(pic_dir) pic_list = glob.glob('*.TIF') pic = [] for i in range(len(pic_list)): pic_a = tifffile.imread(pic_dir + '\' + pic_list[i]) pic.append(pic_a) pic_array = np.array(pic) #(1536,140,140)_1536枚の140*140pixelの外観画像 pic_array_2 = pic_array.reshape(pic_array.shape[0], 19600) #140*140pixelのTIF画像を19600の長さで1行に整形 pic_array_3 = pic_array_2.astype('float32')/255 #輝度の正規化 X_train = pic_array_3 [:1530,:] #学習用_外観画像 X_test = pic_array_3 [1530:,:] #テスト用_外観画像 Y_train = data_array [:1530] #学習用_測定値 Y_test = data_array [1530:] #テスト用_測定値 #モデルの定義_人のをまねながら設定したものです model = Sequential() model.add(Dense(100, input_shape=(19600,))) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(50)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('softmax')) model.compile(loss='mean_squared_error', optimizer='adam') model.summary() #学習_バッチサイズが多きいほどすぐに終わる? df_batch_size = 256 nb_epochs = 10 history = model.fit(X_train, Y_train, epochs = nb_epochs, batch_size = df_batch_size) #損失の確認_nb_epochs = 100程度にしても多少上下しながら横ばいになります plt.plot(history.history['loss'], label ='loss') #予測_X_test[w]_wに0,1,2,3,4,5のどれを入れても結果は同じになります。 model.predict(X_test[0].reshape(1,-1)) #返り値は_array([[1.]], dtype=float32)
試したこと
model.add(Dense(1)) model.add(Activation('softmax'))
としてしまっていたところを
model.add(Dense(1)) model.add(Activation('linear'))
と変更して出力がそのまま出てくるようにした
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/25 04:40 編集
2019/09/25 05:57
2019/09/25 06:24