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

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

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

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

Python 3.x

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

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Q&A

1回答

405閲覧

hyperoptを使ったパラメーターチューニング

kasi

総合スコア6

Keras

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

Python 3.x

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

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

0グッド

0クリップ

投稿2018/11/05 05:57

編集2022/01/12 10:55

前提・実現したいこと

kerasでhyperoptを使ってパラメータのチューニングをしています。

https://teratail.com/questions/98390
の解答を参考にしながらコードを作成しています。

上記に記載されているコードでは
'batch_size': hp.choice('batch_size', [10, 20, 30])
と設定しているのですが、チューニングの結果は、
'batch_size': 1
となってしまいます。チューニングの結果が指定したパラメータの中から得られないのはなぜなのでしょうか?
'l1_out','l2_out'についても同様の問題が起きています。

該当のソースコード

import numpy as np
import pandas as pd
import random
from hyperopt import fmin, tpe, hp, rand
from sklearn.metrics import accuracy_score
from sklearn import cross_validation
from sklearn import svm
from sklearn.cross_validation import StratifiedKFold
from sklearn.preprocessing import LabelBinarizer
from keras.layers import Activation, Dropout, BatchNormalization, Dense
from keras.models import Sequential
from keras.datasets import mnist
from keras.metrics import categorical_crossentropy
from keras.utils import np_utils
from keras.optimizers import Adam
from keras.callbacks import EarlyStopping

hyperopt_parameters = {
'l1_drop': hp.uniform('l1_drop', 0.0, 0.3),
'l2_drop': hp.uniform('l2_drop', 0.0, 0.3),
'l1_out': hp.choice('l1_out', [64, 128, 256, 512, 1024]),
'l2_out': hp.choice('l2_out', [64, 128, 256, 512, 1024]),
'bn1': hp.choice('bn1', [0, 1]),
'bn2': hp.choice('bn2', [0, 1]),
'batch_size': hp.choice('batch_size', [10, 20, 30]),
'epochs': hp.choice('epochs', [5]),
}

from sklearn import datasets
df = datasets.load_iris()
iris_data = df.data
iris_target_org = df.target
iris_target = np_utils.to_categorical(iris_target_org)

input_n = iris_data.shape[1]
output_n = np.unique(iris_target_org).shape[0]

skf = StratifiedKFold(iris_target_org, 5)

count = 0

def function(args):
args['epochs'] = int(args['epochs'])
for train, test in skf:
model = Sequential()
model.add(Dense(args['l1_out'], input_dim=input_n))
if args['bn1'] == 0:
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(args['l1_drop']))
model.add(Dense(args['l2_out']))
if args['bn2'] == 0:
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(args['l2_drop']))
model.add(Dense(output_n, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy']) early_stopping = EarlyStopping(patience=0, verbose=1) model.fit(iris_data[train], iris_target[train], batch_size=args['batch_size'], epochs=args['epochs'], verbose=1, validation_split=0.2, callbacks=[early_stopping]) evaluation = model.evaluate(iris_data[test], iris_target[test], batch_size=args['batch_size'], verbose=0) return evaluation[0]

best = fmin(function,hyperopt_parameters,algo=tpe.suggest,max_evals=1)
print("best estimate parameters",best)

試したこと

計算時間短縮のため、元のコードのmax_evalsとepochsを変更しています。
hp.choiceの使い方の問題があるのでしょうか、、?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

'batch_size': 1は1番目の要素ということで20ではないでしょうか

投稿2018/11/27 05:22

m_yui_fe

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問