Optuna를 사용하여 함수 최적화를 시도합니다.
소개
Optuna는 하이퍼파라미터의 자동 최적화 프레임워크입니다. 주로 기계 학습의 하이퍼 파라미터 튜닝에 사용되는 것 같습니다.
공식 홈페이지
준비
먼저 라이브러리를 설치합시다.
pip install optuna로 설치할 수 있습니다.
실험
이번에는
x^2+y^2+z^2
최소화 문제를 최적화합시다.
목적 함수 정의
소개 목적 함수를 정의합니다.
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
최적화 실행
시작하기 study 객체를 생성한 후 최적화를 실행합니다.
optimze()의 인수인 n_trials에서 검색 횟수를 설정할 수 있습니다.
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
실행하면 다음과 같은 표시가 됩니다. (일부 발췌)
[I 2019-12-01 23:01:21,564] Finished trial#381 resulted in value: 121.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,705] Finished trial#382 resulted in value: 56.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,866] Finished trial#383 resulted in value: 88.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,012] Finished trial#384 resulted in value: 104.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,170] Finished trial#385 resulted in value: 426.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,361] Finished trial#386 resulted in value: 5249.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,523] Finished trial#387 resulted in value: 165.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,684] Finished trial#388 resulted in value: 84.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
최적화된 매개변수를 확인하려면 다음을 추가합니다.
print(study.best_params)
최적화된 목적 함수 값을 확인하려면 다음을 추가합니다.
print(study.best_value)
또한 각 시도를 확인하려면 study.trials에서 정보를 검색합니다.
for i in study.trials:
print(i.number, i.params, i.value)
코드
이번에 사용한 코드를 넣으십시오.
# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
if __name__ == '__main__':
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
epoches = [] # 試行回数格納用
values = [] # best_value格納用
best = 100000 # 適当に最大値を格納しておく
# best更新を行う
for i in study.trials:
if best > i.value:
best = i.value
epoches.append(i.number+1)
values.append(best)
# グラフ設定等
plt.plot(epoches, values, color="red")
plt.title("optuna")
plt.xlabel("trial")
plt.ylabel("value")
plt.show()
결과
이 실험 결과의 그림은 다음과 같습니다.
best_value의 값은 3.0이었기 때문에 진정한 최적해에는 도달하지 않았지만, 초기 단계에서 수렴해 오고 있는 것을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Optuna를 사용하여 함수 최적화를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pontyo4/items/0a56528988c1e9e3a65e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 라이브러리를 설치합시다.
pip install optuna로 설치할 수 있습니다.
실험
이번에는
x^2+y^2+z^2
최소화 문제를 최적화합시다.
목적 함수 정의
소개 목적 함수를 정의합니다.
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
최적화 실행
시작하기 study 객체를 생성한 후 최적화를 실행합니다.
optimze()의 인수인 n_trials에서 검색 횟수를 설정할 수 있습니다.
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
실행하면 다음과 같은 표시가 됩니다. (일부 발췌)
[I 2019-12-01 23:01:21,564] Finished trial#381 resulted in value: 121.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,705] Finished trial#382 resulted in value: 56.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,866] Finished trial#383 resulted in value: 88.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,012] Finished trial#384 resulted in value: 104.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,170] Finished trial#385 resulted in value: 426.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,361] Finished trial#386 resulted in value: 5249.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,523] Finished trial#387 resulted in value: 165.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,684] Finished trial#388 resulted in value: 84.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
최적화된 매개변수를 확인하려면 다음을 추가합니다.
print(study.best_params)
최적화된 목적 함수 값을 확인하려면 다음을 추가합니다.
print(study.best_value)
또한 각 시도를 확인하려면 study.trials에서 정보를 검색합니다.
for i in study.trials:
print(i.number, i.params, i.value)
코드
이번에 사용한 코드를 넣으십시오.
# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
if __name__ == '__main__':
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
epoches = [] # 試行回数格納用
values = [] # best_value格納用
best = 100000 # 適当に最大値を格納しておく
# best更新を行う
for i in study.trials:
if best > i.value:
best = i.value
epoches.append(i.number+1)
values.append(best)
# グラフ設定等
plt.plot(epoches, values, color="red")
plt.title("optuna")
plt.xlabel("trial")
plt.ylabel("value")
plt.show()
결과
이 실험 결과의 그림은 다음과 같습니다.
best_value의 값은 3.0이었기 때문에 진정한 최적해에는 도달하지 않았지만, 초기 단계에서 수렴해 오고 있는 것을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Optuna를 사용하여 함수 최적화를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pontyo4/items/0a56528988c1e9e3a65e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
x^2+y^2+z^2
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
[I 2019-12-01 23:01:21,564] Finished trial#381 resulted in value: 121.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,705] Finished trial#382 resulted in value: 56.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,866] Finished trial#383 resulted in value: 88.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,012] Finished trial#384 resulted in value: 104.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,170] Finished trial#385 resulted in value: 426.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,361] Finished trial#386 resulted in value: 5249.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,523] Finished trial#387 resulted in value: 165.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,684] Finished trial#388 resulted in value: 84.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
print(study.best_params)
print(study.best_value)
for i in study.trials:
print(i.number, i.params, i.value)
# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt
# 目的関数を設定(今回はx^2+y^2+z^2)
def objective(trial):
# 最適化するパラメータを設定
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
# 評価値を返す(デフォルトで最小化するようになっている)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
if __name__ == '__main__':
# studyオブジェクト生成
study = optuna.create_study()
# 最適化実行
study.optimize(objective, n_trials=500)
epoches = [] # 試行回数格納用
values = [] # best_value格納用
best = 100000 # 適当に最大値を格納しておく
# best更新を行う
for i in study.trials:
if best > i.value:
best = i.value
epoches.append(i.number+1)
values.append(best)
# グラフ設定等
plt.plot(epoches, values, color="red")
plt.title("optuna")
plt.xlabel("trial")
plt.ylabel("value")
plt.show()
이 실험 결과의 그림은 다음과 같습니다.
best_value의 값은 3.0이었기 때문에 진정한 최적해에는 도달하지 않았지만, 초기 단계에서 수렴해 오고 있는 것을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Optuna를 사용하여 함수 최적화를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pontyo4/items/0a56528988c1e9e3a65e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)