mirror of
https://github.com/jung-geun/PSO.git
synced 2025-12-20 04:50:45 +09:00
23-05-29 | 2
처음 초기화를 균일 분포로 랜덤하게 시작함 iris 기준 11 세대만에 99.16 % 에 도달 성능이 매우 높게 나타남
This commit is contained in:
6
iris.py
6
iris.py
@@ -39,9 +39,11 @@ x_train, x_test, y_train, y_test = load_data()
|
|||||||
|
|
||||||
loss = 'categorical_crossentropy'
|
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(
|
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.model_save("./result/iris")
|
||||||
pso_iris.save_info("./result/iris/")
|
pso_iris.save_info("./result/iris/")
|
||||||
|
|
||||||
|
|||||||
6
mnist.py
6
mnist.py
@@ -73,13 +73,13 @@ x_test, y_test = get_data_test()
|
|||||||
# loss = 'poisson'
|
# loss = 'poisson'
|
||||||
# loss = 'cosine_similarity'
|
# loss = 'cosine_similarity'
|
||||||
# loss = 'log_cosh'
|
# loss = 'log_cosh'
|
||||||
# loss = 'huber_loss'
|
loss = 'huber_loss'
|
||||||
# loss = 'mean_absolute_error'
|
# loss = 'mean_absolute_error'
|
||||||
# loss = 'mean_absolute_percentage_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(
|
weight, score = pso_mnist.fit(
|
||||||
x_test, y_test, epochs=1000, save=True, save_path="./result/mnist", renewal="acc", empirical_balance=False, Dispersion=True)
|
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")
|
pso_mnist.model_save("./result/mnist")
|
||||||
|
|||||||
@@ -41,8 +41,11 @@ class Optimizer:
|
|||||||
|
|
||||||
for i in tqdm(range(self.n_particles), desc="Initializing Particles"):
|
for i in tqdm(range(self.n_particles), desc="Initializing Particles"):
|
||||||
m = keras.models.model_from_json(model.to_json())
|
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"])
|
m.compile(loss=self.loss, optimizer="sgd", metrics=["accuracy"])
|
||||||
|
|
||||||
self.particles[i] = Particle(m, loss)
|
self.particles[i] = Particle(m, loss)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -256,6 +259,7 @@ class Optimizer:
|
|||||||
|
|
||||||
if check_point is not None:
|
if check_point is not None:
|
||||||
if _ % check_point == 0:
|
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")
|
self._check_point_save(f"./{save_path}/{self.day}/check_point_{_}.h5")
|
||||||
|
|
||||||
return self.g_best, self.g_best_score
|
return self.g_best, self.g_best_score
|
||||||
|
|||||||
15
readme.md
15
readme.md
@@ -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 알고리즘 구현
|
## 1. PSO 알고리즘 구현
|
||||||
|
|
||||||
```plain text
|
```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_meta.py # PSO 알고리즘 구현
|
||||||
pso_tf.py # tensorflow 모델을 이용가능한 PSO 알고리즘 구현
|
pso_tf.py # tensorflow 모델을 이용가능한 PSO 알고리즘 구현
|
||||||
pso_bp.py # 오차역전파 함수를 최적화하는 PSO 알고리즘 구현 - 성능이 99% 이상으로 나오나 목적과 다름
|
pso_bp.py # 오차역전파 함수를 최적화하는 PSO 알고리즘 구현 - 성능이 99% 이상으로 나오나 목적과 다름
|
||||||
|
|||||||
Reference in New Issue
Block a user