#5 - 메모리의 점진적인 누수
파티클의 갯수 4000개 epochs 100회 기준 최종적으로 150GB 의 메모리 사용량을 보인다
하지만 초기의 메모리는 26GB 로 점진적으로 메모리의 사용량이 증가하는것으로 볼 수 있다
This commit is contained in:
jung-geun
2023-09-04 14:07:22 +09:00
parent e5f364c3b2
commit 727ae8c604
5 changed files with 15661 additions and 19 deletions

View File

@@ -2,5 +2,4 @@
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
"python.formatting.provider": "none"
}

View File

@@ -210,6 +210,9 @@ best_score = pso_mnist.fit(
![mnist_acc](./history_plt/mnist_63.84_acc.png)
![mnist_loss](./history_plt/mnist_63.84_loss.png)
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 보다 더 떨어지는 정확도를 보이고 있다. (현재 수정중)
### 개인적인 생각

View File

@@ -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!")

15644
plt.ipynb

File diff suppressed because one or more lines are too long

View File

@@ -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",
@@ -258,7 +256,7 @@ class Optimizer:
self.dispersion = dispersion
self.renewal = renewal
particle_sum = 0 # x_j
particle_sum = 0 # x_j
try:
train_log_dir = "logs/fit/" + self.day
if log == 2:
@@ -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]