mirror of
https://github.com/jung-geun/PSO.git
synced 2025-12-19 20:44:39 +09:00
23-05-24 | 2
pyplot 을 추가하여 loss 와 acc 가 학습할때 어떻게 변화하는지 적용
This commit is contained in:
138
mnist.ipynb
138
mnist.ipynb
@@ -12,7 +12,7 @@
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"2023-05-24 12:58:36.275491: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n"
|
||||
"2023-05-24 15:37:52.889357: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -84,7 +84,25 @@
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"x_train : (28, 28, 1) | y_train : ()\n",
|
||||
"x_test : (28, 28, 1) | y_test : ()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"init particles position: 100%|██████████| 30/30 [00:00<00:00, 36.65it/s]\n",
|
||||
"init velocities: 100%|██████████| 30/30 [00:00<00:00, 681.12it/s]\n",
|
||||
"Iter 0/20: 13%|#3 | 4/30 [00:04<00:20, 1.28it/s]"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"'''\n",
|
||||
"optimizer parameter\n",
|
||||
@@ -98,52 +116,70 @@
|
||||
"pso parameter\n",
|
||||
"'''\n",
|
||||
"n_particles = 30\n",
|
||||
"maxiter = 50\n",
|
||||
"maxiter = 20\n",
|
||||
"# epochs = 1\n",
|
||||
"w = 0.8\n",
|
||||
"c0 = 0.6\n",
|
||||
"c1 = 1.6\n",
|
||||
"\n",
|
||||
"def auto_tuning(n_particles=n_particles, maxiter=maxiter, c0=c0, c1=c1, w=w):\n",
|
||||
" x_train, y_train, x_test, y_test = get_data()\n",
|
||||
" model = make_model()\n",
|
||||
"\n",
|
||||
" loss = keras.losses.MeanSquaredError()\n",
|
||||
" optimizer = keras.optimizers.SGD(lr=lr, momentum=momentun, decay=decay, nesterov=nestrov)\n",
|
||||
"x_train, y_train, x_test, y_test = get_data()\n",
|
||||
"model = make_model()\n",
|
||||
"\n",
|
||||
"loss = keras.losses.MeanSquaredError()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" pso_m = PSO(model=model, loss_method=loss, n_particles=n_particles, x_train=x_train, y_train=y_train)\n",
|
||||
" # c0 : 지역 최적값 중요도\n",
|
||||
" # c1 : 전역 최적값 중요도\n",
|
||||
" # w : 관성 (현재 속도를 유지하는 정도)\n",
|
||||
" best_weights, score = pso_m.optimize(x_train, y_train, x_test, y_test, maxiter=maxiter, c0=c0, c1=c1, w=w)\n",
|
||||
" model.set_weights(best_weights)\n",
|
||||
"pso_m = PSO(model=model, loss_method=loss, n_particles=n_particles)\n",
|
||||
"# c0 : 지역 최적값 중요도\n",
|
||||
"# c1 : 전역 최적값 중요도\n",
|
||||
"# w : 관성 (현재 속도를 유지하는 정도)\n",
|
||||
"best_weights, score = pso_m.optimize(x_train, y_train, x_test, y_test, maxiter=maxiter, c0=c0, c1=c1, w=w)\n",
|
||||
"model.set_weights(best_weights)\n",
|
||||
"\n",
|
||||
" score_ = model.evaluate(x_test, y_test, verbose=2)\n",
|
||||
" print(f\" Test loss: {score_}\")\n",
|
||||
" score = round(score_[1]*100, 2)\n",
|
||||
"score_ = model.evaluate(x_test, y_test, verbose=2)\n",
|
||||
"print(f\" Test loss: {score_}\")\n",
|
||||
"score = round(score_[1]*100, 2)\n",
|
||||
"\n",
|
||||
"day = date.today().strftime(\"%Y-%m-%d\")\n",
|
||||
"\n",
|
||||
"os.makedirs(f'./model', exist_ok=True)\n",
|
||||
"model.save(f'./model/{day}_{score}_mnist.h5')\n",
|
||||
"json_save = {\n",
|
||||
" \"name\" : f\"{day}_{score}_mnist.h5\",\n",
|
||||
" \"score\" : score_,\n",
|
||||
" \"maxiter\" : maxiter,\n",
|
||||
" \"c0\" : c0,\n",
|
||||
" \"c1\" : c1,\n",
|
||||
" \"w\" : w \n",
|
||||
"}\n",
|
||||
"with open(f'./model/{day}_{score}_mnist.json', 'a') as f:\n",
|
||||
" json.dump(json_save, f)\n",
|
||||
" f.write(',\\n')\n",
|
||||
"\n",
|
||||
" day = date.today().strftime(\"%Y-%m-%d\")\n",
|
||||
" \n",
|
||||
" os.makedirs(f'./model', exist_ok=True)\n",
|
||||
" model.save(f'./model/{day}_{score}_mnist.h5')\n",
|
||||
" json_save = {\n",
|
||||
" \"name\" : f\"{day}_{score}_mnist.h5\",\n",
|
||||
" \"score\" : score_,\n",
|
||||
" \"maxiter\" : maxiter,\n",
|
||||
" \"c0\" : c0,\n",
|
||||
" \"c1\" : c1,\n",
|
||||
" \"w\" : w \n",
|
||||
" }\n",
|
||||
" with open(f'./model/{day}_{score}_mnist.json', 'a') as f:\n",
|
||||
" json.dump(json_save, f)\n",
|
||||
" f.write(',\\n')\n",
|
||||
" \n",
|
||||
" return model\n",
|
||||
"\n",
|
||||
"# auto_tuning(n_particles=30, maxiter=1000, c0=0.5, c1=1.5, w=0.75)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "1af7569b",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"loss_, acc_ = pso_m.all_history()\n",
|
||||
"\n",
|
||||
"plt.subplot(2,1,1)\n",
|
||||
"for layer in all_loss:\n",
|
||||
" plt.plot(layer)\n",
|
||||
"plt.title('loss history')\n",
|
||||
"\n",
|
||||
"plt.subplot(2,1,2)\n",
|
||||
"for layer in all_acc:\n",
|
||||
" plt.plot(layer)\n",
|
||||
"plt.title('acc history')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
@@ -903,24 +939,24 @@
|
||||
],
|
||||
"source": [
|
||||
"# print(f\"정답 > {y_test}\")\n",
|
||||
"def get_score(model):\n",
|
||||
" x_train, y_train, x_test, y_test = get_data()\n",
|
||||
" \n",
|
||||
" predicted_result = model.predict(x_test)\n",
|
||||
" predicted_labels = np.argmax(predicted_result, axis=1)\n",
|
||||
" not_correct = []\n",
|
||||
" for i in tqdm(range(len(y_test)), desc=\"진행도\"):\n",
|
||||
" if predicted_labels[i] != y_test[i]:\n",
|
||||
" not_correct.append(i)\n",
|
||||
" # print(f\"추론 > {predicted_labels[i]} | 정답 > {y_test[i]}\")\n",
|
||||
" \n",
|
||||
" print(f\"틀린 갯수 > {len(not_correct)}/{len(y_test)}\")\n",
|
||||
"\n",
|
||||
" for i in range(3):\n",
|
||||
" plt.imshow(x_test[not_correct[i]].reshape(28,28), cmap='Greys')\n",
|
||||
" plt.show() \n",
|
||||
" \n",
|
||||
"get_score(auto_tuning(n_particles=30, maxiter=1000, c0=0.5, c1=1.5, w=0.75))"
|
||||
"x_train, y_train, x_test, y_test = get_data()\n",
|
||||
"\n",
|
||||
"predicted_result = model.predict(x_test)\n",
|
||||
"predicted_labels = np.argmax(predicted_result, axis=1)\n",
|
||||
"not_correct = []\n",
|
||||
"for i in tqdm(range(len(y_test)), desc=\"진행도\"):\n",
|
||||
" if predicted_labels[i] != y_test[i]:\n",
|
||||
" not_correct.append(i)\n",
|
||||
" # print(f\"추론 > {predicted_labels[i]} | 정답 > {y_test[i]}\")\n",
|
||||
" \n",
|
||||
"print(f\"틀린 갯수 > {len(not_correct)}/{len(y_test)}\")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"for i in range(3):\n",
|
||||
" plt.imshow(x_test[not_correct[i]].reshape(28,28), cmap='Greys')\n",
|
||||
"plt.show() \n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user