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'
|
||||
|
||||
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/")
|
||||
|
||||
|
||||
6
mnist.py
6
mnist.py
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
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 알고리즘 구현
|
||||
|
||||
```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% 이상으로 나오나 목적과 다름
|
||||
|
||||
Reference in New Issue
Block a user