mirror of
https://github.com/jung-geun/PSO.git
synced 2025-12-20 04:50:45 +09:00
23-09-04
#5 - 메모리의 점진적인 누수 파티클의 갯수 4000개 epochs 100회 기준 최종적으로 150GB 의 메모리 사용량을 보인다 하지만 초기의 메모리는 26GB 로 점진적으로 메모리의 사용량이 증가하는것으로 볼 수 있다
This commit is contained in:
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@@ -2,5 +2,4 @@
|
||||
"[python]": {
|
||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
||||
},
|
||||
"python.formatting.provider": "none"
|
||||
}
|
||||
12
README.md
12
README.md
@@ -210,6 +210,9 @@ best_score = pso_mnist.fit(
|
||||

|
||||

|
||||
|
||||
63%의 정확도가 나타나는 것으로 보아 최적화가 되어가고 있다고 볼 수 있을 것 같습니다.
|
||||
하지만 정확도가 더 이상 올라가지 않고 정체되는 것으로 보아 조기 수렴하는 문제가 발생하고 있다고 생각합니다.
|
||||
|
||||
## Trouble Shooting
|
||||
|
||||
> 1. 딥러닝 알고리즘 특성상 weights는 처음 컴파일시 무작위하게 생성된다. weights의 각 지점의 중요도는 매번 무작위로 정해지기에 전역 최적값으로 찾아갈 때 값이 높은 loss를 향해서 상승하는 현상이 나타난다.</br>
|
||||
@@ -226,9 +229,14 @@ best_score = pso_mnist.fit(
|
||||
-> keras 모델을 사용할때 predict, evaluate 함수를 사용하면 메모리 누수가 발생하는 문제를 찾았습니다. 해결방법을 추가로 찾아보는중 입니다. -> 메모리 누수를 획기적으로 줄여 현재는 파티클의 수를 500개에서 1000개까지 증가시켜도 문제가 없습니다.</br>
|
||||
-> 추가로 파티클의 수가 적을때에도 전역 최적해를 쉽게 찾는 방법을 찾는중 입니다</br>
|
||||
|
||||
> 4. 모델의 크기가 커지면 수렴이 늦어지고 정확도가 떨어지는 현상이 발견되었다. 모델의 크기에 맞는 파라미터를 찾아야할 것 같다.
|
||||
> 4. 현재 tensorboard 로 로그 저장시 994개 이상 저장이 안되는 문제가 발생하고 있습니다.
|
||||
|
||||
> 5. EBPSO 의 방식을 추가로 적용을 하였으나 수식을 잘못 적용을 한것인지 기본 pso 보다 더 떨어지는 정확도를 보이고 있다. (현재 수정중)
|
||||
-> csv 파일로 저장할 경우 갯수에는 문제가 발생하지 않습니다.
|
||||
-> 수가 적을때 한 파티클이 지역 최적해에서 머무를 경우 파티클을 초기화 하는 방법이 필요해 보입니다.
|
||||
|
||||
> 5. 모델의 크기가 커지면 수렴이 늦어지고 정확도가 떨어지는 현상이 발견되었다. 모델의 크기에 맞는 파라미터를 찾아야할 것 같다.
|
||||
|
||||
> 6. EBPSO 의 방식을 추가로 적용을 하였으나 수식을 잘못 적용을 한것인지 기본 pso 보다 더 떨어지는 정확도를 보이고 있다. (현재 수정중)
|
||||
|
||||
### 개인적인 생각
|
||||
|
||||
|
||||
11
mnist.py
11
mnist.py
@@ -104,11 +104,11 @@ loss = [
|
||||
pso_mnist = optimizer(
|
||||
model,
|
||||
loss="mean_squared_error",
|
||||
n_particles=990,
|
||||
n_particles=2000,
|
||||
c0=0.2,
|
||||
c1=0.4,
|
||||
w_min=0.3,
|
||||
w_max=0.6,
|
||||
w_max=0.7,
|
||||
negative_swarm=0.1,
|
||||
mutation_swarm=0.3,
|
||||
particle_min=-4,
|
||||
@@ -118,15 +118,16 @@ pso_mnist = optimizer(
|
||||
best_score = pso_mnist.fit(
|
||||
x_train,
|
||||
y_train,
|
||||
epochs=200,
|
||||
epochs=300,
|
||||
save_info=True,
|
||||
log=2,
|
||||
log=1,
|
||||
log_name="mnist",
|
||||
save_path="./result/mnist",
|
||||
save_path="./logs/mnist",
|
||||
renewal="acc",
|
||||
check_point=25,
|
||||
empirical_balance=False,
|
||||
dispersion=False,
|
||||
|
||||
)
|
||||
|
||||
print("Done!")
|
||||
|
||||
@@ -130,8 +130,6 @@ class Optimizer:
|
||||
sys.exit("Ctrl + C : Stop Training")
|
||||
except MemoryError:
|
||||
sys.exit("Memory Error : Stop Training")
|
||||
except Exception as e:
|
||||
sys.exit(e)
|
||||
|
||||
def __del__(self):
|
||||
del self.model
|
||||
@@ -245,7 +243,7 @@ class Optimizer:
|
||||
x : numpy array,
|
||||
y : numpy array,
|
||||
epochs : int,
|
||||
log : int - 0 : log 기록 안함, 1 : log, 2 : tensorboard,
|
||||
log : int - 0 : log 기록 안함, 1 : csv, 2 : tensorboard,
|
||||
save_info : bool - 종료시 학습 정보 저장 여부 default : False,
|
||||
save_path : str - ex) "./result",
|
||||
renewal : str ex) "acc" or "loss" or "both",
|
||||
@@ -277,10 +275,8 @@ class Optimizer:
|
||||
self.save_path = save_path
|
||||
if not os.path.exists(f"{save_path}/{self.day}"):
|
||||
os.makedirs(f"{save_path}/{self.day}", exist_ok=True)
|
||||
except ValueError as e:
|
||||
sys.exit(e)
|
||||
except Exception as e:
|
||||
sys.exit(e)
|
||||
except ValueError as ve:
|
||||
sys.exit(ve)
|
||||
|
||||
for i in tqdm(range(self.n_particles), desc="Initializing velocity"):
|
||||
p = self.particles[i]
|
||||
|
||||
Reference in New Issue
Block a user