seed 조정 추가
This commit is contained in:
jung-geun
2023-06-30 22:56:25 +09:00
parent 97abf75149
commit 174d68d518
6 changed files with 154 additions and 101 deletions

13
iris.py
View File

@@ -2,16 +2,10 @@ import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
tf.random.set_seed(777) # for reproducibility
import numpy as np
np.random.seed(777)
import gc import gc
import numpy as np
import tensorflow as tf
from pso import Optimizer from pso import Optimizer
from sklearn.datasets import load_iris from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split from sklearn.model_selection import train_test_split
@@ -52,7 +46,8 @@ pso_iris = Optimizer(
c1=0.8, c1=0.8,
w_min=0.7, w_min=0.7,
w_max=1.0, w_max=1.0,
negative_swarm=0.25 negative_swarm=0,
mutation_swarm=0,
) )
best_score = pso_iris.fit( best_score = pso_iris.fit(

View File

@@ -3,17 +3,9 @@ import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
tf.random.set_seed(777) # for reproducibility
import numpy as np
np.random.seed(777)
import gc import gc
from datetime import date
import tensorflow as tf
from keras import backend as K from keras import backend as K
from keras.datasets import mnist from keras.datasets import mnist
from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D
@@ -76,7 +68,7 @@ if __name__ == "__main__":
w_min=0.6, w_min=0.6,
w_max=0.9, w_max=0.9,
negative_swarm=0.25, negative_swarm=0.25,
momentun_swarm=0, mutation_swarm=0,
) )
best_score = pso_mnist.fit( best_score = pso_mnist.fit(

File diff suppressed because one or more lines are too long

View File

@@ -33,6 +33,8 @@ class Optimizer:
w_max=1.5, w_max=1.5,
negative_swarm: float = 0, negative_swarm: float = 0,
mutation_swarm: float = 0, mutation_swarm: float = 0,
np_seed: int = 777,
tf_seed: int = 777,
): ):
""" """
particle swarm optimization particle swarm optimization
@@ -48,6 +50,8 @@ class Optimizer:
nefative_swarm (float): 최적해와 반대로 이동할 파티클 비율 - 0 ~ 1 사이의 값 nefative_swarm (float): 최적해와 반대로 이동할 파티클 비율 - 0 ~ 1 사이의 값
momentun_swarm (float): 관성을 추가로 사용할 파티클 비율 - 0 ~ 1 사이의 값 momentun_swarm (float): 관성을 추가로 사용할 파티클 비율 - 0 ~ 1 사이의 값
""" """
np.random.seed(np_seed)
tf.random.set_seed(tf_seed)
self.model = model # 모델 구조 self.model = model # 모델 구조
self.loss = loss # 손실함수 self.loss = loss # 손실함수
self.n_particles = n_particles # 파티클 개수 self.n_particles = n_particles # 파티클 개수
@@ -67,11 +71,14 @@ class Optimizer:
m = keras.models.model_from_json(model.to_json()) m = keras.models.model_from_json(model.to_json())
init_weights = m.get_weights() init_weights = m.get_weights()
w_, sh_, len_ = self._encode(init_weights) w_, sh_, len_ = self._encode(init_weights)
w_ = np.random.rand(len(w_)) * 5 - 2.5 w_ = np.random.uniform(-0.5, 0.5, len(w_))
# w_ = np.random.uniform(-1.5, 1.5, len(w_))
m.set_weights(self._decode(w_, sh_, len_)) m.set_weights(self._decode(w_, sh_, len_))
m.compile(loss=self.loss, optimizer="sgd", metrics=["accuracy"]) m.compile(loss=self.loss, optimizer="sgd", metrics=["accuracy"])
self.particles[i] = Particle(m, loss, negative=True if i < negative_swarm * self.n_particles else False, mutation=True if i > self.n_particles * (1 - self.mutation_swarm) else False) self.particles[i] = Particle(
m, loss,
negative=True if i < negative_swarm * self.n_particles else False,
mutation=True if i > self.n_particles * (1 - self.mutation_swarm) else False
)
gc.collect() gc.collect()
@@ -427,7 +434,7 @@ class Optimizer:
"empirical_balance": self.empirical_balance, "empirical_balance": self.empirical_balance,
"Dispersion": self.Dispersion, "Dispersion": self.Dispersion,
"negative_swarm": self.negative_swarm, "negative_swarm": self.negative_swarm,
"momentun_swarm": self.momentun_swarm, "mutation_swarm": self.mutation_swarm,
"renewal": self.renewal, "renewal": self.renewal,
} }

File diff suppressed because one or more lines are too long

12
xor.py
View File

@@ -1,19 +1,15 @@
# %% # %%
import os import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
tf.random.set_seed(777) # for reproducibility
import numpy as np import numpy as np
np.random.seed(777) import tensorflow as tf
# from pso_tf import PSO # from pso_tf import PSO
from pso import Optimizer from pso import Optimizer
from tensorflow import keras from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras import layers from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
print(tf.__version__) print(tf.__version__)
print(tf.config.list_physical_devices()) print(tf.config.list_physical_devices())
@@ -40,7 +36,7 @@ x_test, y_test = get_data()
loss = ['mean_squared_error', 'mean_squared_logarithmic_error', 'binary_crossentropy', 'categorical_crossentropy', 'sparse_categorical_crossentropy', 'kullback_leibler_divergence', 'poisson', 'cosine_similarity', 'log_cosh', 'huber_loss', 'mean_absolute_error', 'mean_absolute_percentage_error'] loss = ['mean_squared_error', 'mean_squared_logarithmic_error', 'binary_crossentropy', 'categorical_crossentropy', 'sparse_categorical_crossentropy', 'kullback_leibler_divergence', 'poisson', 'cosine_similarity', 'log_cosh', 'huber_loss', 'mean_absolute_error', 'mean_absolute_percentage_error']
pso_xor = Optimizer(model, pso_xor = Optimizer(model,
loss=loss[0], n_particles=75, c0=0.35, c1=0.8, w_min=0.6, w_max=1.2, negative_swarm=0.25) loss=loss[0], n_particles=75, c0=0.35, c1=0.8, w_min=0.6, w_max=1.2, negative_swarm=0.25, mutation_swarm=0.25)
best_score = pso_xor.fit( best_score = pso_xor.fit(
x_test, y_test, epochs=200, save=True, save_path="./result/xor", renewal="acc", empirical_balance=False, Dispersion=False, check_point=25) x_test, y_test, epochs=200, save=True, save_path="./result/xor", renewal="acc", empirical_balance=False, Dispersion=False, check_point=25)