pso2keras 버전을 1.0.5에서 1.0.5.1로 업데이트하고, TensorFlow GPU 메모리 성장을 설정하고, TF_CPP_MIN_LOG_LEVEL을 2로 설정했습니다.

This commit is contained in:
jung-geun
2024-03-08 19:35:44 +09:00
parent 5798aa38a8
commit fa9af45a95
5 changed files with 29 additions and 37 deletions

View File

@@ -1,6 +1,7 @@
variables: variables:
PYTHON_VERSION: "3.9" PYTHON_VERSION: "3.9"
TWINE_USERNAME: "__token__" TWINE_USERNAME: $PYPI_USERNAME
TWINE_PASSWORD: $PYPI_PASSWORD
build-pypi: build-pypi:
stage: build-pypi stage: build-pypi

View File

@@ -4,6 +4,12 @@
[![Duplicated Lines (%)](https://sonar.pieroot.xyz/api/project_badges/measure?project=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a&metric=duplicated_lines_density&token=sqb_5fa45d924cd1c13f71a23a9283fba9460dc63eb6)](https://sonar.pieroot.xyz/dashboard?id=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a) [![Duplicated Lines (%)](https://sonar.pieroot.xyz/api/project_badges/measure?project=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a&metric=duplicated_lines_density&token=sqb_5fa45d924cd1c13f71a23a9283fba9460dc63eb6)](https://sonar.pieroot.xyz/dashboard?id=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a)
[![Security Rating](https://sonar.pieroot.xyz/api/project_badges/measure?project=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a&metric=security_rating&token=sqb_5fa45d924cd1c13f71a23a9283fba9460dc63eb6)](https://sonar.pieroot.xyz/dashboard?id=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a) [![Security Rating](https://sonar.pieroot.xyz/api/project_badges/measure?project=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a&metric=security_rating&token=sqb_5fa45d924cd1c13f71a23a9283fba9460dc63eb6)](https://sonar.pieroot.xyz/dashboard?id=pieroot_pso_6a2f36a9-2688-4900-a4a5-5be85f36f75a)
# PSO
keras model on particle swarm optimization
현재 모델을 python 3.9 버전, tensorflow 2.11 버전에서 테스트 되었습니다
### 목차 ### 목차
> [PSO 알고리즘 구현 및 새로운 시도](#pso-알고리즘-구현-및-새로운-시도)</br> > [PSO 알고리즘 구현 및 새로운 시도](#pso-알고리즘-구현-및-새로운-시도)</br>

View File

@@ -1,10 +1,21 @@
import tensorflow as tf
import os
from .optimizer import Optimizer as optimizer from .optimizer import Optimizer as optimizer
from .particle import Particle as particle from .particle import Particle as particle
__version__ = "1.0.5" __version__ = "1.0.5.1"
print("pso2keras version : " + __version__) print("pso2keras version : " + __version__)
gpus = tf.config.experimental.list_physical_devices("GPU")
if gpus:
try:
tf.config.experimental.set_memory_growth(gpus[0], True)
except RuntimeError as r:
print(r)
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"
__all__ = [ __all__ = [
"optimizer", "optimizer",
"particle", "particle",

View File

@@ -16,15 +16,6 @@ from tqdm.auto import tqdm
from .particle import Particle from .particle import Particle
gpus = tf.config.experimental.list_physical_devices("GPU")
if gpus:
try:
tf.config.experimental.set_memory_growth(gpus[0], True)
except RuntimeError as r:
print(r)
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"
def find_free_port(): def find_free_port():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -123,7 +114,6 @@ class Optimizer:
mutation_swarm # 관성을 추가로 사용할 파티클 비율 - 0 ~ 1 사이의 값 mutation_swarm # 관성을 추가로 사용할 파티클 비율 - 0 ~ 1 사이의 값
) )
self.avg_score = 0 # 평균 점수 self.avg_score = 0 # 평균 점수
# self.sigma = 1.0
self.renewal = "acc" self.renewal = "acc"
self.dispersion = False self.dispersion = False
@@ -383,7 +373,7 @@ class Optimizer:
if renewal is None: if renewal is None:
renewal = "loss" renewal = "loss"
if renewal not in ["acc", "loss", "mse"]: elif renewal not in ["acc", "loss", "mse"]:
raise ValueError("renewal not in ['acc', 'loss', 'mse']") raise ValueError("renewal not in ['acc', 'loss', 'mse']")
if empirical_balance is None: if empirical_balance is None:
@@ -392,11 +382,12 @@ class Optimizer:
if dispersion is None: if dispersion is None:
dispersion = False dispersion = False
if validate_data is not None: if (
if validate_data[0].shape[0] != validate_data[1].shape[0]: validate_data is not None
and validate_data[0].shape[0] != validate_data[1].shape[0]
):
raise ValueError("validate_data shape error") raise ValueError("validate_data shape error")
else:
if validate_data is None:
validate_data = (x, y) validate_data = (x, y)
if validation_split is not None: if validation_split is not None:
@@ -511,7 +502,7 @@ class Optimizer:
min_mse = np.inf min_mse = np.inf
# 한번의 실행 동안 최고 점수를 받은 파티클의 인덱스 # 한번의 실행 동안 최고 점수를 받은 파티클의 인덱스
best_particle_index = 0 best_particle_index = 0
# epoch_particle_sum = 0
part_pbar = tqdm( part_pbar = tqdm(
range(len(self.particles)), range(len(self.particles)),
desc=f"loss: {min_loss:.4f} acc: {max_acc:.4f} mse: {min_mse:.4f}", desc=f"loss: {min_loss:.4f} acc: {max_acc:.4f} mse: {min_mse:.4f}",
@@ -520,7 +511,6 @@ class Optimizer:
position=1, position=1,
) )
# w = self.w_max - (self.w_max - self.w_min) * epoch / epochs
w = ( w = (
self.w_max self.w_max
- (self.w_max - self.w_min) - (self.w_max - self.w_min)
@@ -572,22 +562,6 @@ class Optimizer:
) )
p_ = np.exp(-1 * sigma_pre * sigma_post) p_ = np.exp(-1 * sigma_pre * sigma_post)
# p_ = (
# 1
# / (self.n_particles * np.linalg.norm(self.particle_max - self.particle_min))
# * np.exp(
# -np.power(l_b, 2) / (2 * np.power(self.sigma, 2))
# )
# )
# g_ = (
# 1
# / np.linalg.norm(self.c1 - self.c0)
# * np.exp(
# -np.power(l_b, 2) / (2 * np.power(self.sigma, 2))
# )
# )
# w_p = p_ / (p_ + g_)
# w_g = g_ / (p_ + g_)
w_p = p_ w_p = p_
w_g = 1 - p_ w_g = 1 - p_

View File

@@ -23,7 +23,7 @@ setup(
"tensorboard", "tensorboard",
], ],
packages=find_packages(exclude=[]), packages=find_packages(exclude=[]),
keywords=["pso", "tensorflow", "keras"], keywords=["pso", "tensorflow", "keras", "optimization","particle swarm optimization","pso2keras"],
python_requires=">=3.8", python_requires=">=3.8",
package_data={}, package_data={},
zip_safe=False, zip_safe=False,