keras モデル構築 評価
#ケース1 score = model.evaluate(x_test, y_test, batch_size=128) #ケース2 scores = model.evaluate(X, Y, verbose=0) print("%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))
keras モデル構築 学習
#ケース1 data = np.random.random((1000, 100)) labels = np.random.randint(10, size=(1000, 1)) # ラベルデータをカテゴリの1-hotベクトルにエンコードする one_hot_labels = keras.utils.to_categorical(labels, num_classes=10) # 各イテレーションのバッチサイズを32で学習を行なう model.fit(data, one_hot_labels, epochs=10, batch_size=32) #ケース2 # Pima indians datasetをロード dataset = np.loadtxt(os.path.join("..", "data", "pima-indians-diabetes.data"), delimiter=',') # データとラベルを取得 X = dataset[:, 0:8] Y = dataset[:, 8] model.fit(X, Y, nb_epoch=150, batch_size=10) #ケース3 x_train = np.random.random((1000, 20)) y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10) model.fit(x_train, y_train, epochs=20, batch_size=128)
keras モデル構築 コンパイル記述
モデルの学習を始める前に,compileメソッドを用いどのような学習処理を行なうかを設定する必要があります.compileメソッドは3つの引数を取ります:
- 最適化アルゴリズム: 引数として,定義されている最適化手法の識別子を文字列として与える(rmspropやadagradなど),もしくは Optimizerクラスのインスタンスを与えることができます. 参考: 最適化
- 損失関数: モデルが最小化しようとする目的関数です.引数として,定義されている損失関数の識別子を文字列として与える(categorical_crossentropyやmseなど),もしくは目的関数を関数として与えることができます.参考:損失関数
- 評価関数のリスト: 分類問題では精度としてmetrics=['accuracy']を指定したくなるでしょう.引数として,定義されている評価関数の識別子を文字列として与える,もしくは自分で定義した関数を関数として与えることができます.
# マルチクラス分類問題の場合 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 2値分類問題の場合 model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) # 平均二乗誤差を最小化する回帰問題の場合 model.compile(optimizer='rmsprop', loss='mse') # 独自定義の評価関数を定義 import keras.backend as K def mean_pred(y_true, y_pred): return K.mean(y_pred) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy', mean_pred])
keras モデル構築 Sequentialモデルでの構築
Sequentialモデルでの構築
#.addで組む際はこのやり方 model = Sequential() model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu')) model.add(Dense(1, init='uniform', activation='sigmoid')) #input_dim それぞれの入力blobのdim、各blobはnum, channels, height, widthの4つの次元を持つ。
- initで層の重みの初期化方法を指定できる
- uniformだと0~0.05の一様乱数。normalだと正規乱数。Deep Learning Tutorialの初期値重みで使われていたglorot_uniformもある層の活性化関数は、独立した層ではなくDenseのactivation引数でも指定できる
- 隠れ層の活性化関数にはrelu、出力層の活性化関数にはsigmoidを指定
- 出力層にsigmoidを使うと0.0から1.0の値が出力されるため入力データのクラスが1である確率とみなせる。0.5を閾値として0.5未満ならクラス0、0.5以上ならクラス1として分類する.
他に例えば
入力層784次元、中間層1024次元、出力層10次元のニューラルネットワークの構築は
model = Sequntial() model.add(Dense(1024, input_dim=784)) model.add(Activation('sigmoid')) model.add(Dense(10)) model.add(Activation('softmax'))
モデル:例2
model = Sequential( model.add(Dense(512, input_shape=(784,))) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(10)) model.add(Activation('softmax')) return model
KerasのConvolution2Dを使う時にborder_modeという引数があり、'valid'と'same'が選択できるのですが、これが何なのかを調べるとStackExchangeに書いてありました(convnet - border_mode for convolutional layers in keras - Data Science Stack Exchange)。
‘valid’
出力画像は入力画像よりもサイズが小さくなる。
‘same’
ゼロパディングすることで、出力画像は入力画像と同じサイズになる。
ゼロパディングすることのメリットについてはここ(定番のConvolutional Neural Networkをゼロから理解する - DeepAge)に書いてあります。
端のデータに対する畳み込み回数が増えるので端の特徴も考慮されるようになる
畳み込み演算の回数が増えるのでパラメーターの更新が多く実行される
カーネルのサイズや、層の数を調整できる
chainerRLを動かす
python 数値計算 平方根
# -*- coding: utf-8 -*- import math def main(): x = 5 y = math.sqrt(x) print(y) if __name__ == "__main__": main()
python数値計算 5のべき乗を計算したい場合
pythonでべき乗
5のべき乗を計算したい場合
# -*- coding: utf-8 -*- def main(): x = 5 y = pow(x,2) print(y) if __name__ == "__main__": main()