23-05-29 | 2

처음 초기화를 균일 분포로 랜덤하게 시작함
iris 기준 11 세대만에 99.16 % 에 도달
성능이 매우 높게 나타남
This commit is contained in:
jung-geun
2023-05-29 04:54:20 +09:00
parent 91c6ec965b
commit c5731c6870
5 changed files with 33 additions and 14 deletions

View File

@@ -39,9 +39,11 @@ x_train, x_test, y_train, y_test = load_data()
loss = 'categorical_crossentropy'
pso_iris = Optimizer(model, loss=loss, n_particles=50, c0=0.4, c1=0.8, w_min=0.7, w_max=1.3)
pso_iris = Optimizer(model, loss=loss, n_particles=50, c0=0.5, c1=0.8, w_min=0.7, w_max=1.3)
weight, score = pso_iris.fit(
x_train, y_train, epochs=500, save=True, save_path="./result/iris", renewal="acc", empirical_balance=True, Dispersion=True, check_point=50)
x_train, y_train, epochs=500, save=True, save_path="./result/iris", renewal="acc", empirical_balance=False, Dispersion=False, check_point=50)
pso_iris.model_save("./result/iris")
pso_iris.save_info("./result/iris/")

View File

@@ -73,13 +73,13 @@ x_test, y_test = get_data_test()
# loss = 'poisson'
# loss = 'cosine_similarity'
# loss = 'log_cosh'
# loss = 'huber_loss'
loss = 'huber_loss'
# loss = 'mean_absolute_error'
# loss = 'mean_absolute_percentage_error'
loss = 'mean_squared_error'
# loss = 'mean_squared_error'
pso_mnist = Optimizer(model, loss=loss, n_particles=50, c0=0.4, c1=0.8, w_min=0.75, w_max=1.4)
pso_mnist = Optimizer(model, loss=loss, n_particles=50, c0=0.5, c1=0.8, w_min=0.75, w_max=1.3)
weight, score = pso_mnist.fit(
x_test, y_test, epochs=1000, save=True, save_path="./result/mnist", renewal="acc", empirical_balance=False, Dispersion=True)
pso_mnist.model_save("./result/mnist")

File diff suppressed because one or more lines are too long

View File

@@ -41,8 +41,11 @@ class Optimizer:
for i in tqdm(range(self.n_particles), desc="Initializing Particles"):
m = keras.models.model_from_json(model.to_json())
init_weights = m.get_weights()
w_, sh_, len_ = self._encode(init_weights)
w_ = np.random.uniform(-0.1, 0.1, len(w_))
m.set_weights(self._decode(w_, sh_, len_))
m.compile(loss=self.loss, optimizer="sgd", metrics=["accuracy"])
self.particles[i] = Particle(m, loss)
"""
@@ -256,6 +259,7 @@ class Optimizer:
if check_point is not None:
if _ % check_point == 0:
os.makedirs(f"./{save_path}/{self.day}", exist_ok=True)
self._check_point_save(f"./{save_path}/{self.day}/check_point_{_}.h5")
return self.g_best, self.g_best_score

View File

@@ -13,7 +13,10 @@ pso 알고리즘을 사용하여 새로운 학습 방법을 찾는중 입니다
다음 위치를 구하는 수식입니다
> $$p_{id(t+1)} = \begin{cases} x_{id(t+1)} & \text{if } f(x_{id(t+1)}) < f(p_{id(t)}) \\ p_{id(t)} & \text{otherwise} \end{cases}$$
> $$p_{id(t+1)} = \begin{cases}
x_{id(t+1)} & \text{if } f(x_{id(t+1)}) < f(p_{id(t)})
\\ p_{id(t)} & \text{otherwise}
\end{cases}$$
### 위치를 가장 최적값으로 변경(덮어쓰기)하면 안되는 이유
@@ -24,6 +27,16 @@ pso 알고리즘을 사용하여 새로운 학습 방법을 찾는중 입니다
## 1. PSO 알고리즘 구현
```plain text
|-- metacode # pso 기본 코드
|-- pso # tensorflow 모델을 학습하기 위해 기본 pso 코드에서 수정 - (psokeras 코드 의 구조를 사용하여 만듬)
|-- psokeras # keras 모델을 이용가능한 PSO 알고리즘 - 다른 사람의 코드
|-- pyswarms # pyswarms 라이브러리를 이용가능한 PSO 알고리즘 - 다른 사람의 코드
|-- examples.py # psokeras 코드를 이용한 예제
|-- iris.py # pso 코드를 이용한 iris 문제 풀이
|-- mnist.py # pso 코드를 이용한 mnist 문제 풀이
|-- xor.ipynb # pso 코드를 이용한 xor 문제 풀이
|-- plt.ipynb # pyplot 으로 학습 결과를 그래프로 표현
pso_meta.py # PSO 알고리즘 구현
pso_tf.py # tensorflow 모델을 이용가능한 PSO 알고리즘 구현
pso_bp.py # 오차역전파 함수를 최적화하는 PSO 알고리즘 구현 - 성능이 99% 이상으로 나오나 목적과 다름