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

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

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

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

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

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

PyCharm

エディター・開発ツール

Q&A

0回答

1500閲覧

GridSearchCVで自作関数を使用したい

TR123

総合スコア0

Keras

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

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

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

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2020/08/07 11:52

Python初心者なのですが、解析プログラムを作成しています。
DNNモデル構造をGridsearchで最適化しようと、自作関数を定義したところでエラーが出ました。
よろしければお知恵をお貸しください。どうぞよろしくお願い致します。

'float' object is not callable

def build_model(activation , optimizer): input_layer=Input(shape=(4,),dtype='float') model1=Dense(8)(input_layer) model1=Activation('relu')(model1) model1=Dropout(0.25)(model1) model2=Dense(4)(model1) model2=Activation(activation)(model2) model2=Dropout(0.25)(model2) model2=Dense(1)(model2) model3=Dense(4)(model1) model3=Activation(activation)(model3) model3=Dropout(0.25)(model3) model3=Dense(1)(model3) output_layer=Concatenate()([model2,model3]) defmodel=Model(input=input_layer,outputs=output_layer) defmodel.summary() defmodel.compile(optimizer=optimizer,loss='mean_squared_logarithmic_error') return defmodel activation = ["softmax"] optimizer = ["adam"] nb_epoch = [200] batch_size = [50] param_grid = dict(activation=activation, optimizer=optimizer, nb_epoch=nb_epoch, batch_size=batch_size) defmodel = KerasRegressor(build_fn=build_model, verbose=0) def my_scorer(a, b): c=float(1.0) scoring_value = dll(a, b, float(c)) #dllは外部ライブラリで、三つの引数を受け取り、一つの値を返します。 return scoring_value from sklearn.metrics import make_scorer my_func = make_scorer(my_scorer(a, b), greater_is_better=False) grid = GridSearchCV(estimator=defmodel, param_grid=param_grid, scoring=my_func) grid_result = grid.fit(info_headless, coeff)

試したこと

引数a,bはndarray型です。
自作関数を使わない状態では問題ありませんでした。
my_value=my_scorer(a, b)などとしても問題なく動作しますが、上記のコードだと最後の1行でエラーを出すようです。

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

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

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

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

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

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

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

meg_

2020/08/07 12:08

エラーメッセージは全文掲載ください。
TR123

2020/08/07 12:17

失礼いたしました。合っているかわかりませんが、こちらでよろしいでしょうか。 Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\utils\validation.py", line 73, in inner_f return f(**kwargs) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 736, in fit self._run_search(evaluate_candidates) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 1188, in _run_search evaluate_candidates(ParameterGrid(self.param_grid)) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 715, in evaluate_candidates cv.split(X, y, groups))) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 1029, in __call__ if self.dispatch_one_batch(iterator): File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 847, in dispatch_one_batch self._dispatch(tasks) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 765, in _dispatch job = self._backend.apply_async(batch, callback=cb) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\_parallel_backends.py", line 208, in apply_async result = ImmediateResult(func) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\_parallel_backends.py", line 572, in __init__ self.results = batch() File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 253, in __call__ for func, args, kwargs in self.items] File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 253, in <listcomp> for func, args, kwargs in self.items] File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_validation.py", line 560, in _fit_and_score test_scores = _score(estimator, X_test, y_test, scorer) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_validation.py", line 607, in _score scores = scorer(estimator, X_test, y_test) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\metrics\_scorer.py", line 88, in __call__ *args, **kwargs) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\metrics\_scorer.py", line 213, in _score **self._kwargs) TypeError: 'float' object is not callable
meg_

2020/08/07 14:28

私も詳しくはないのですが、「my_func = make_scorer(my_scorer(a, b), greater_is_better=False)」は「my_func = make_scorer(my_scorer, greater_is_better=False)」ではどうでしょうか?
TR123

2020/08/07 15:32

ご回答ありがとうございます。 index 16 is out of bounds for axis 0 with size 16 という別のエラーが出てしまうようです。 aとbが思うように渡せなくなるのかと思います。。。 また思いつくことがあればぜひご教示くだされば幸いです。ありがとうございます。 Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Users\TR\AppData\Local\JetBrains\Toolbox\apps\PyCharm-P\ch-0\201.6668.115\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile pydev_imports.execfile(filename, global_vars, local_vars) # execute the script File "C:\Users\TR\AppData\Local\JetBrains\Toolbox\apps\PyCharm-P\ch-0\201.6668.115\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "C:/Users/TR/Documents/PyCharm/Project200802/toda200729_gridsearch_2.py", line 163, in <module> grid_result = grid.fit(info_headless, coeff) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\utils\validation.py", line 73, in inner_f return f(**kwargs) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 736, in fit self._run_search(evaluate_candidates) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 1188, in _run_search evaluate_candidates(ParameterGrid(self.param_grid)) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_search.py", line 715, in evaluate_candidates cv.split(X, y, groups))) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 1029, in __call__ if self.dispatch_one_batch(iterator): File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 847, in dispatch_one_batch self._dispatch(tasks) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 765, in _dispatch job = self._backend.apply_async(batch, callback=cb) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\_parallel_backends.py", line 208, in apply_async result = ImmediateResult(func) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\_parallel_backends.py", line 572, in __init__ self.results = batch() File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 253, in __call__ for func, args, kwargs in self.items] File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\joblib\parallel.py", line 253, in <listcomp> for func, args, kwargs in self.items] File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_validation.py", line 560, in _fit_and_score test_scores = _score(estimator, X_test, y_test, scorer) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\model_selection\_validation.py", line 607, in _score scores = scorer(estimator, X_test, y_test) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\metrics\_scorer.py", line 88, in __call__ *args, **kwargs) File "C:\Users\TR\anaconda3\envs\Project200803\lib\site-packages\sklearn\metrics\_scorer.py", line 213, in _score **self._kwargs) File "C:/Users/TR/Documents/PyCharm/Project200802/toda200729_gridsearch_2.py", line 153, in my_scorer scoring_obj_value = pynlme.compute(parameters, coeff, adjustment) IndexError: index 16 is out of bounds for axis 0 with size 16
meg_

2020/08/08 01:36

「info_headless, coeff」に問題はありませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問