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

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

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

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

Python

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

解決済

kerasを用いてCSVに各エポック毎に出力したい

FALLOT
FALLOT

総合スコア16

Keras

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

Python

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

1回答

0評価

0クリップ

6004閲覧

投稿2018/10/23 13:28

編集2018/10/25 05:55

kerasを用いて,画像を入力データとして,数値予測する回帰分析をしています.

CSVloggerを用いて各エポック毎にloss.val_lossを出力しているのですが,予測値の出力仕方が分かります.以下のコードに加えたいのですが,どのよううにコーディングすればよいでしょうか?

python

#最大応力の値の予測 from keras.models import Sequential from keras.layers import Activation, Dense, Dropout, LeakyReLU #from keras.layers.advanced_activations import LeakyReLU from keras.utils.np_utils import to_categorical from keras.optimizers import Adagrad from keras.optimizers import Adam from keras.models import load_model from keras.callbacks import EarlyStopping, ModelCheckpoint, CSVLogger from sklearn.model_selection import train_test_split from sklearn import datasets import numpy as np from PIL import Image import os import time import csv import cv2 import math start_time = time.time() print("開始時刻: " + str(start_time)) #それぞれの画像の枚数を入力 A = 50 B = 50 sum =A+B # 学習用のデータを作る. image_list = [] location_list = [] #ハイパーパラメータ #画像サイズ x = 150 y = 75 Z = x*y #入力層のノード数 #エポック数 E = 5 #バッチサイズ BATCH_SIZE = 32 #学習率 LR = 0.00001 #訓練データの数 train=sum train=sum #画像の読み込み:読み込み→リサイズ→1列に変換→正規化 print("画像の読み込み 開始") count=1 for i in range(0,A): im = cv2.imread("data/image/a/"+str(i)+"a.png".format(i),1) #画像の読み込み print(str(i)+"a.png") image = np.array(Image.open("data/image/a/"+str(i)+"a.png").resize((x, y))) #画像をnum配列にしてリサイズ print(image.shape) image =np.reshape(image,Z) #2次元行列を1次元行列に変換 print(image.shape) image_list.append(image / 255.) #appendは追加:1枚ずつ足しこんでいく print(str(count)+"/"+str(train)) count +=1 print('\n') for i in range(0,B): im = cv2.imread("data/image/b/"+str(i)+"b.png".format(i),1) #画像の読み込み print(str(i)+"b.png") image = np.array(Image.open("data/image/b/"+str(i)+"b.png").resize((x, y))) #画像をnum配列にしてリサイズ print(image.shape) image =np.reshape(image,Z) #2次元行列を1次元行列に変換 print(image.shape) image_list.append(image / 255.) #appendは追加:1枚ずつ足しこんでいく print(str(count)+"/"+str(train)) count +=1 print('\n') print("画像の読み込み 終了") # kerasに渡すためにnumpy配列に変換。 image_list = np.array(image_list) #最大応力の位置_読み込み_表示 location = np.loadtxt("data/value/max_stress_value_a.csv",delimiter=",",skiprows=0) location_list.extend(location) location = np.loadtxt("data/value/max_stress_value_b.csv",delimiter=",",skiprows=0) location_list.extend(location) location_list = np.array(location_list) print("\n最大応力の値の行列の形") print(location_list.shape) #print(location_list) np.savetxt("data/value/max_stress_value_true.csv",location_list,delimiter=",") #最大応力の位置_読み込み_終了 # モデルを生成してニューラルネットを構築 model = Sequential() model.add(Dense(5000, input_dim=Z,kernel_initializer='random_uniform',bias_initializer='zeros')) #model.add(Activation("LeakyReLU")) model.add(LeakyReLU()) model.add(Dropout(0.2)) model.add(Dense(100,kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(LeakyReLU()) model.add(Dropout(0.075)) model.add(Dense(10,kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(LeakyReLU()) model.add(Dropout(0.0)) model.add(Dense(5,kernel_initializer='random_uniform',bias_initializer='zeros')) model.add(LeakyReLU()) model.add(Dropout(0.0)) model.add(Dense(1)) model.add(Activation("linear")) # オプティマイザ(最適化)にAdamを使用 opt = Adam(lr=LR) # モデルをコンパイル #最大応力位置の予測 誤差関数:二乗誤差 model.compile(loss="mean_absolute_percentage_error", optimizer=opt) #CSVに各エポックの学習結果の保存 csv_logger = CSVLogger('result/training_process.csv') # 学習を実行。20%はテストに使用 #最大応力位置の予測 モデルフィット history = model.fit(image_list, location_list, nb_epoch=E,verbose=1,callbacks=[csv_logger], batch_size=BATCH_SIZE, validation_split=0.2) #最大応力位置の予測 誤差の評価 loss = model.evaluate(image_list, location_list) #最終の学習結果を書き込む fp = open("result/RESULT.txt","w") fp.write("\nloss:{}".format(loss)) fp.close() #最終の誤差の表示 print("\nloss:{}\n".format(loss)) #予測値 predicted= model.predict(image_list) #print("NNの最大応力の値 予測値") #print(predicted) np.savetxt("result/max_stress_value_predict_result.csv",predicted,delimiter=",") image_list = np.array(image_list) location_list = np.array(location_list) print(image_list.shape, image_list.dtype) # (300, 11250) float64 print(location_list.shape, location_list.dtype) # (300,) float64 def get_batch(image_list, location_list, batch_size, shuffle=False): '''ミニバッチを生成するジェネレーター関数 ''' num_samples = location_list # サンプル数 if shuffle:# シャッフルする場合 indices = np.random.permutation(num_samples) else: # シャッフルしない場合 indices = np.random.arange(num_samples) num_steps = np.ceil(num_samples / batch_size).astype(int) print(num_steps) print(type(num_steps)) for itr in range(num_steps): start = batch_size * itr excerpt = indices[start:start + batch_size] yield x[excerpt], y[excerpt] # 保存用ディレクトリ out_dirpath = 'prediction' os.makedirs(out_dirpath, exist_ok=True) x_train, x_test, y_train, y_test = train_test_split(image_list, location_list, test_size=0.2) # 学習する。 epochs = E for i in range(epochs): for x_batch, y_batch in get_batch(x_train, y_train, batch_size=BATCH_SIZE, shuffle=True): # x_batch, y_batch が生成されたミニバッチ # 1バッチ分学習する model.train_on_batch(x_batch, y_batch) # エポックごとにテストデータで推論する。 y_pred = model.predict_classes(x_train) result = np.c_[y_pred, y_train] # 推論結果を保存する。 filepath = os.path.join(out_dirpath, 'prediction_{}.csv'.format(i)) np.savetxt(filepath, result, fmt='%.0f') end_time = time.time() print("\n終了時刻: ",end_time) print ("かかった時間: ", (end_time - start_time)) ttime = end_time - start_time fa = open("result/TIME.txt","w") fa.write("\nかかった時間:{} ".format(ttime)) fa.close()

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Keras

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

Python

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