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]": {
|
"[python]": {
|
||||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
"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
|
## Trouble Shooting
|
||||||
|
|
||||||
> 1. 딥러닝 알고리즘 특성상 weights는 처음 컴파일시 무작위하게 생성된다. weights의 각 지점의 중요도는 매번 무작위로 정해지기에 전역 최적값으로 찾아갈 때 값이 높은 loss를 향해서 상승하는 현상이 나타난다.</br>
|
> 1. 딥러닝 알고리즘 특성상 weights는 처음 컴파일시 무작위하게 생성된다. weights의 각 지점의 중요도는 매번 무작위로 정해지기에 전역 최적값으로 찾아갈 때 값이 높은 loss를 향해서 상승하는 현상이 나타난다.</br>
|
||||||
@@ -226,9 +229,14 @@ best_score = pso_mnist.fit(
|
|||||||
-> keras 모델을 사용할때 predict, evaluate 함수를 사용하면 메모리 누수가 발생하는 문제를 찾았습니다. 해결방법을 추가로 찾아보는중 입니다. -> 메모리 누수를 획기적으로 줄여 현재는 파티클의 수를 500개에서 1000개까지 증가시켜도 문제가 없습니다.</br>
|
-> keras 모델을 사용할때 predict, evaluate 함수를 사용하면 메모리 누수가 발생하는 문제를 찾았습니다. 해결방법을 추가로 찾아보는중 입니다. -> 메모리 누수를 획기적으로 줄여 현재는 파티클의 수를 500개에서 1000개까지 증가시켜도 문제가 없습니다.</br>
|
||||||
-> 추가로 파티클의 수가 적을때에도 전역 최적해를 쉽게 찾는 방법을 찾는중 입니다</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(
|
pso_mnist = optimizer(
|
||||||
model,
|
model,
|
||||||
loss="mean_squared_error",
|
loss="mean_squared_error",
|
||||||
n_particles=990,
|
n_particles=2000,
|
||||||
c0=0.2,
|
c0=0.2,
|
||||||
c1=0.4,
|
c1=0.4,
|
||||||
w_min=0.3,
|
w_min=0.3,
|
||||||
w_max=0.6,
|
w_max=0.7,
|
||||||
negative_swarm=0.1,
|
negative_swarm=0.1,
|
||||||
mutation_swarm=0.3,
|
mutation_swarm=0.3,
|
||||||
particle_min=-4,
|
particle_min=-4,
|
||||||
@@ -118,15 +118,16 @@ pso_mnist = optimizer(
|
|||||||
best_score = pso_mnist.fit(
|
best_score = pso_mnist.fit(
|
||||||
x_train,
|
x_train,
|
||||||
y_train,
|
y_train,
|
||||||
epochs=200,
|
epochs=300,
|
||||||
save_info=True,
|
save_info=True,
|
||||||
log=2,
|
log=1,
|
||||||
log_name="mnist",
|
log_name="mnist",
|
||||||
save_path="./result/mnist",
|
save_path="./logs/mnist",
|
||||||
renewal="acc",
|
renewal="acc",
|
||||||
check_point=25,
|
check_point=25,
|
||||||
empirical_balance=False,
|
empirical_balance=False,
|
||||||
dispersion=False,
|
dispersion=False,
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
print("Done!")
|
print("Done!")
|
||||||
|
|||||||
@@ -130,8 +130,6 @@ class Optimizer:
|
|||||||
sys.exit("Ctrl + C : Stop Training")
|
sys.exit("Ctrl + C : Stop Training")
|
||||||
except MemoryError:
|
except MemoryError:
|
||||||
sys.exit("Memory Error : Stop Training")
|
sys.exit("Memory Error : Stop Training")
|
||||||
except Exception as e:
|
|
||||||
sys.exit(e)
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
del self.model
|
del self.model
|
||||||
@@ -245,7 +243,7 @@ class Optimizer:
|
|||||||
x : numpy array,
|
x : numpy array,
|
||||||
y : numpy array,
|
y : numpy array,
|
||||||
epochs : int,
|
epochs : int,
|
||||||
log : int - 0 : log 기록 안함, 1 : log, 2 : tensorboard,
|
log : int - 0 : log 기록 안함, 1 : csv, 2 : tensorboard,
|
||||||
save_info : bool - 종료시 학습 정보 저장 여부 default : False,
|
save_info : bool - 종료시 학습 정보 저장 여부 default : False,
|
||||||
save_path : str - ex) "./result",
|
save_path : str - ex) "./result",
|
||||||
renewal : str ex) "acc" or "loss" or "both",
|
renewal : str ex) "acc" or "loss" or "both",
|
||||||
@@ -258,7 +256,7 @@ class Optimizer:
|
|||||||
self.dispersion = dispersion
|
self.dispersion = dispersion
|
||||||
|
|
||||||
self.renewal = renewal
|
self.renewal = renewal
|
||||||
particle_sum = 0 # x_j
|
particle_sum = 0 # x_j
|
||||||
try:
|
try:
|
||||||
train_log_dir = "logs/fit/" + self.day
|
train_log_dir = "logs/fit/" + self.day
|
||||||
if log == 2:
|
if log == 2:
|
||||||
@@ -277,10 +275,8 @@ class Optimizer:
|
|||||||
self.save_path = save_path
|
self.save_path = save_path
|
||||||
if not os.path.exists(f"{save_path}/{self.day}"):
|
if not os.path.exists(f"{save_path}/{self.day}"):
|
||||||
os.makedirs(f"{save_path}/{self.day}", exist_ok=True)
|
os.makedirs(f"{save_path}/{self.day}", exist_ok=True)
|
||||||
except ValueError as e:
|
except ValueError as ve:
|
||||||
sys.exit(e)
|
sys.exit(ve)
|
||||||
except Exception as e:
|
|
||||||
sys.exit(e)
|
|
||||||
|
|
||||||
for i in tqdm(range(self.n_particles), desc="Initializing velocity"):
|
for i in tqdm(range(self.n_particles), desc="Initializing velocity"):
|
||||||
p = self.particles[i]
|
p = self.particles[i]
|
||||||
|
|||||||
Reference in New Issue
Block a user