From fc28951db19a6b9afac083f4f8eec366445e011b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E7=8E=8B=E4=B8=80?= <790436986@qq.com> Date: Sun, 28 Nov 2021 12:11:13 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E5=BE=90=E7=8E=8B?= =?UTF-8?q?=E4=B8=80=20=E9=81=A5=E6=84=9F=E5=9C=BA=E6=99=AF=E8=AF=86?= =?UTF-8?q?=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/.keep" diff --git "a/code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/.keep" "b/code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From 9090e2c4353a7394555d5cfcb07ac3916095fddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E7=8E=8B=E4=B8=80?= <790436986@qq.com> Date: Sun, 28 Nov 2021 12:15:35 +0000 Subject: [PATCH 2/2] code --- .../model.ipynb" | 903 ++++++++++++++++++ 1 file changed, 903 insertions(+) create mode 100644 "code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/model.ipynb" diff --git "a/code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/model.ipynb" "b/code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/model.ipynb" new file mode 100644 index 0000000..68d5b23 --- /dev/null +++ "b/code/2021_autumn/\345\276\220\347\216\213\344\270\200 \351\201\245\346\204\237\345\234\272\346\231\257\350\257\206\345\210\253/model.ipynb" @@ -0,0 +1,903 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "bd82cd47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "ename": "RuntimeError", + "evalue": "mindspore/ccsrc/backend/session/gpu_session.cc:308 Execute] GPU execute graph failed!\n\n# ", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 453\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 454\u001b[0m \u001b[0;31m# 训练模型\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 455\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_epochs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtrain_ds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0meval_cb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTimeMonitor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdataset_sink_mode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/model.py\u001b[0m in \u001b[0;36mtrain\u001b[0;34m(self, epoch, train_dataset, callbacks, dataset_sink_mode, sink_size)\u001b[0m\n\u001b[1;32m 625\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[0mdataset_sink_mode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdataset_sink_mode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 627\u001b[0;31m sink_size=sink_size)\n\u001b[0m\u001b[1;32m 628\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 629\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_eval_dataset_sink_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalid_dataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/model.py\u001b[0m in \u001b[0;36m_train\u001b[0;34m(self, epoch, train_dataset, callbacks, dataset_sink_mode, sink_size)\u001b[0m\n\u001b[1;32m 411\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mepoch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain_dataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 412\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 413\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_dataset_sink_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mepoch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain_dataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msink_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 414\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 415\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/model.py\u001b[0m in \u001b[0;36m_train_dataset_sink_process\u001b[0;34m(self, epoch, train_dataset, list_callback, cb_params, sink_size)\u001b[0m\n\u001b[1;32m 484\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[0mdataset_helper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontinue_send\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 486\u001b[0;31m \u001b[0mlist_callback\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mepoch_end\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 487\u001b[0m \u001b[0mshould_stop\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mshould_stop\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mrun_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_stop_requested\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mshould_stop\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/callback/_callback.py\u001b[0m in \u001b[0;36mepoch_end\u001b[0;34m(self, run_context)\u001b[0m\n\u001b[1;32m 198\u001b[0m \u001b[0;34m\"\"\"Called after each epoch finished.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 199\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_callbacks\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 200\u001b[0;31m \u001b[0mcb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mepoch_end\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 201\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstep_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mepoch_end\u001b[0;34m(self, run_context)\u001b[0m\n\u001b[1;32m 381\u001b[0m \u001b[0mloss_epoch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnet_outputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 382\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcur_epoch\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval_start_epoch\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcur_epoch\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval_start_epoch\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterval\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 383\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval_param_dict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 384\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Epoch {}/{}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcur_epoch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_epochs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'-'\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mapply_eval\u001b[0;34m(eval_param)\u001b[0m\n\u001b[1;32m 344\u001b[0m \u001b[0meval_ds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0meval_param\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'dataset'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[0mmetrics_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0meval_param\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'metrics_name'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 346\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0meval_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meval_ds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 347\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmetrics_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 348\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mEvalCallBack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/model.py\u001b[0m in \u001b[0;36meval\u001b[0;34m(self, valid_dataset, callbacks, dataset_sink_mode)\u001b[0m\n\u001b[1;32m 759\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0m_CallbackManager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 760\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdataset_sink_mode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 761\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_eval_dataset_sink_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_dataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 762\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_eval_process\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_dataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 763\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/model.py\u001b[0m in \u001b[0;36m_eval_dataset_sink_process\u001b[0;34m(self, valid_dataset, list_callback, cb_params)\u001b[0m\n\u001b[1;32m 654\u001b[0m \u001b[0mlist_callback\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 655\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 656\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_eval_network\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 657\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 658\u001b[0m \u001b[0mcb_params\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnet_outputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/nn/cell.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *inputs, **kwargs)\u001b[0m\n\u001b[1;32m 363\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mcast_inputs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[0mcast_inputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 365\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_construct\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcast_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 366\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mParameter\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 367\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/nn/cell.py\u001b[0m in \u001b[0;36mrun_construct\u001b[0;34m(self, cast_inputs, kwargs)\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[0m_pynative_exec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menter_construct\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 323\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstruct\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mcast_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 324\u001b[0m \u001b[0m_pynative_exec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleave_construct\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/train/dataset_helper.py\u001b[0m in \u001b[0;36mconstruct\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnetwork\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/ops/primitive.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 186\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mshould_elim\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 188\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_run_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 189\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 190\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getstate__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/common/api.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*arg, **kwargs)\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mwraps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 75\u001b[0;31m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_convert_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/ops/primitive.py\u001b[0m in \u001b[0;36m_run_op\u001b[0;34m(obj, op_name, args)\u001b[0m\n\u001b[1;32m 554\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_run_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 555\u001b[0m \u001b[0;34m\"\"\"Single op execution function supported by ge in PyNative mode.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 556\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreal_run_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 557\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mRuntimeError\u001b[0m: mindspore/ccsrc/backend/session/gpu_session.cc:308 Execute] GPU execute graph failed!\n\n# " + ] + } + ], + "source": [ + "import os\n", + "import math\n", + "import stat\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import mindspore.ops as ops\n", + "import mindspore.nn as nn\n", + "import mindspore.dataset as ds\n", + "import mindspore.dataset.vision.c_transforms as CV\n", + "import mindspore.dataset.transforms.c_transforms as C\n", + "from mindspore.dataset.vision import Inter\n", + "from mindspore.common.initializer import Normal\n", + "from mindspore import dtype as mstype\n", + "from mindspore.train.callback import TimeMonitor, Callback\n", + "from mindspore import Model, Tensor, context, save_checkpoint, load_checkpoint, load_param_into_net\n", + "import numpy as np\n", + "import mindspore.nn as nn\n", + "from mindspore import Tensor\n", + "import mindspore.ops as ops\n", + "from matplotlib import pyplot as plt\n", + "%pylab inline\n", + "\n", + "def weight_variable_0(shape):\n", + " \"\"\"weight_variable_0\"\"\"\n", + " zeros = np.zeros(shape).astype(np.float32)\n", + " return Tensor(zeros)\n", + "\n", + "\n", + "def weight_variable_1(shape):\n", + " \"\"\"weight_variable_1\"\"\"\n", + " ones = np.ones(shape).astype(np.float32)\n", + " return Tensor(ones)\n", + "\n", + "\n", + "def conv3x3(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"3x3 convolution \"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=3, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def conv1x1(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"1x1 convolution\"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=1, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def conv7x7(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"1x1 convolution\"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=7, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def bn_with_initialize(out_channels):\n", + " \"\"\"bn_with_initialize\"\"\"\n", + " shape = (out_channels)\n", + " mean = weight_variable_0(shape)\n", + " var = weight_variable_1(shape)\n", + " beta = weight_variable_0(shape)\n", + " bn = nn.BatchNorm2d(out_channels, momentum=0.99, eps=0.00001, gamma_init='Uniform',\n", + " beta_init=beta, moving_mean_init=mean, moving_var_init=var)\n", + " return bn\n", + "\n", + "\n", + "def bn_with_initialize_last(out_channels):\n", + " \"\"\"bn_with_initialize_last\"\"\"\n", + " shape = (out_channels)\n", + " mean = weight_variable_0(shape)\n", + " var = weight_variable_1(shape)\n", + " beta = weight_variable_0(shape)\n", + " bn = nn.BatchNorm2d(out_channels, momentum=0.99, eps=0.00001, gamma_init='Uniform',\n", + " beta_init=beta, moving_mean_init=mean, moving_var_init=var)\n", + " return bn\n", + "\n", + "\n", + "def fc_with_initialize(input_channels, out_channels):\n", + " \"\"\"fc_with_initialize\"\"\"\n", + " return nn.Dense(input_channels, out_channels, weight_init='XavierUniform', bias_init='Uniform')\n", + "\n", + "\n", + "class ResidualBlock(nn.Cell):\n", + " \"\"\"ResidualBlock\"\"\"\n", + " expansion = 4\n", + "\n", + " def __init__(self,\n", + " in_channels,\n", + " out_channels,\n", + " stride=1):\n", + " \"\"\"init block\"\"\"\n", + " super(ResidualBlock, self).__init__()\n", + "\n", + " out_chls = out_channels // self.expansion\n", + " self.conv1 = conv1x1(in_channels, out_chls, stride=stride, padding=0)\n", + " self.bn1 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv2 = conv3x3(out_chls, out_chls, stride=1, padding=0)\n", + " self.bn2 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv3 = conv1x1(out_chls, out_channels, stride=1, padding=0)\n", + " self.bn3 = bn_with_initialize_last(out_channels)\n", + "\n", + " self.relu = ops.ReLU()\n", + " self.add = ops.Add()\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " identity = x\n", + "\n", + " out = self.conv1(x)\n", + " out = self.bn1(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv2(out)\n", + " out = self.bn2(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv3(out)\n", + " out = self.bn3(out)\n", + "\n", + " out = self.add(out, identity)\n", + " out = self.relu(out)\n", + "\n", + " return out\n", + "\n", + "\n", + "class ResidualBlockWithDown(nn.Cell):\n", + " \"\"\"ResidualBlockWithDown\"\"\"\n", + " expansion = 4\n", + "\n", + " def __init__(self,\n", + " in_channels,\n", + " out_channels,\n", + " stride=1,\n", + " down_sample=False):\n", + " \"\"\"init block with down\"\"\"\n", + " super(ResidualBlockWithDown, self).__init__()\n", + "\n", + " out_chls = out_channels // self.expansion\n", + " self.conv1 = conv1x1(in_channels, out_chls, stride=stride, padding=0)\n", + " self.bn1 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv2 = conv3x3(out_chls, out_chls, stride=1, padding=0)\n", + " self.bn2 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv3 = conv1x1(out_chls, out_channels, stride=1, padding=0)\n", + " self.bn3 = bn_with_initialize_last(out_channels)\n", + "\n", + " self.relu = ops.ReLU()\n", + " self.down_sample = down_sample\n", + "\n", + " self.conv_down_sample = conv1x1(in_channels, out_channels, stride=stride, padding=0)\n", + " self.bn_down_sample = bn_with_initialize(out_channels)\n", + " self.add = ops.Add()\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " identity = x\n", + "\n", + " out = self.conv1(x)\n", + " out = self.bn1(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv2(out)\n", + " out = self.bn2(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv3(out)\n", + " out = self.bn3(out)\n", + "\n", + " identity = self.conv_down_sample(identity)\n", + " identity = self.bn_down_sample(identity)\n", + "\n", + " out = self.add(out, identity)\n", + " out = self.relu(out)\n", + "\n", + " return out\n", + "\n", + "\n", + "class MakeLayer0(nn.Cell):\n", + " \"\"\"MakeLayer0\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer0, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=1, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=stride)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer1(nn.Cell):\n", + " \"\"\"MakeLayer1\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer1, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + " self.d = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + " x = self.d(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer2(nn.Cell):\n", + " \"\"\"MakeLayer2\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer2, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + " self.d = block(out_channels, out_channels, stride=1)\n", + " self.e = block(out_channels, out_channels, stride=1)\n", + " self.f = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + " x = self.d(x)\n", + " x = self.e(x)\n", + " x = self.f(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer3(nn.Cell):\n", + " \"\"\"MakeLayer3\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer3, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class ResNet(nn.Cell):\n", + " \"\"\"ResNet\"\"\"\n", + "\n", + " def __init__(self, block, num_classes=100, batch_size=32):\n", + " \"\"\"init\"\"\"\n", + " super(ResNet, self).__init__()\n", + " self.batch_size = batch_size\n", + " self.num_classes = num_classes\n", + "\n", + " self.conv1 = conv7x7(3, 64, stride=2, padding=0)\n", + "\n", + " self.bn1 = bn_with_initialize(64)\n", + " self.relu = ops.ReLU()\n", + " self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, pad_mode=\"same\")\n", + "\n", + " self.layer1 = MakeLayer0(block, in_channels=64, out_channels=256, stride=1)\n", + " self.layer2 = MakeLayer1(block, in_channels=256, out_channels=512, stride=2)\n", + " self.layer3 = MakeLayer2(block, in_channels=512, out_channels=1024, stride=2)\n", + " self.layer4 = MakeLayer3(block, in_channels=1024, out_channels=2048, stride=2)\n", + "\n", + " self.pool = ops.ReduceMean(keep_dims=True)\n", + " self.squeeze = ops.Squeeze(axis=(2, 3))\n", + " self.fc = fc_with_initialize(512 * block.expansion, num_classes)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.conv1(x)\n", + " x = self.bn1(x)\n", + " x = self.relu(x)\n", + " x = self.maxpool(x)\n", + "\n", + " x = self.layer1(x)\n", + " x = self.layer2(x)\n", + " x = self.layer3(x)\n", + " x = self.layer4(x)\n", + "\n", + " x = self.pool(x, (2, 3))\n", + " x = self.squeeze(x)\n", + " x = self.fc(x)\n", + " return x\n", + "\n", + "\n", + "def resnet50(batch_size, num_classes):\n", + " \"\"\"create resnet50\"\"\"\n", + " return ResNet(ResidualBlock, num_classes, batch_size)\n", + "def create_dataset(data_path, batch_size=20, repeat_num=1, training=True):\n", + " \"\"\"定义数据集\"\"\"\n", + " data_set = ds.ImageFolderDataset(data_path, num_parallel_workers=8, shuffle=True)\n", + "\n", + " # 对数据进行增强操作\n", + " image_size = 200\n", + " mean = [0.485 * 255, 0.456 * 255, 0.406 * 255]\n", + " std = [0.229 * 255, 0.224 * 255, 0.225 * 255]\n", + " if training:\n", + " trans = [\n", + " CV.RandomCropDecodeResize(image_size, scale=(0.08, 1.0), ratio=(0.75, 1.333)),\n", + " CV.RandomHorizontalFlip(prob=0.5),\n", + " CV.Normalize(mean=mean, std=std),\n", + " CV.HWC2CHW()\n", + " ]\n", + " else:\n", + " trans = [\n", + " CV.Decode(),\n", + " CV.Resize(200),\n", + " CV.CenterCrop(image_size),\n", + " CV.HWC2CHW()\n", + " ]\n", + " type_cast_op = C.TypeCast(mstype.int32)\n", + "\n", + " # 实现数据的map映射、批量处理和数据重复的操作\n", + " data_set = data_set.map(operations=trans, input_columns=\"image\", num_parallel_workers=8)\n", + " data_set = data_set.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=8)\n", + " data_set = data_set.batch(batch_size, drop_remainder=True)\n", + " data_set = data_set.repeat(repeat_num)\n", + "\n", + " return data_set\n", + "def apply_eval(eval_param):\n", + " eval_model = eval_param['model']\n", + " eval_ds = eval_param['dataset']\n", + " metrics_name = eval_param['metrics_name']\n", + " res = eval_model.eval(eval_ds)\n", + " return res[metrics_name]\n", + "class EvalCallBack(Callback):\n", + " \"\"\"\n", + " 回调类,获取训练过程中模型的信息\n", + " \"\"\"\n", + "\n", + " def __init__(self, eval_function, eval_param_dict, interval=1, eval_start_epoch=1, save_best_ckpt=True,\n", + " ckpt_directory=\"./\", besk_ckpt_name=\"best.ckpt\", metrics_name=\"acc\"):\n", + " super(EvalCallBack, self).__init__()\n", + " self.eval_param_dict = eval_param_dict\n", + " self.eval_function = eval_function\n", + " self.eval_start_epoch = eval_start_epoch\n", + " if interval < 1:\n", + " raise ValueError(\"interval should >= 1.\")\n", + " self.interval = interval\n", + " self.save_best_ckpt = save_best_ckpt\n", + " self.best_res = 0\n", + " self.best_epoch = 0\n", + " self.losslist=[]\n", + " self.aclist=[]\n", + " if not os.path.isdir(ckpt_directory):\n", + " os.makedirs(ckpt_directory)\n", + " self.best_ckpt_path = os.path.join(ckpt_directory, besk_ckpt_name)\n", + " self.metrics_name = metrics_name\n", + "\n", + " # 删除ckpt文件\n", + " def remove_ckpoint_file(self, file_name):\n", + " os.chmod(file_name, stat.S_IWRITE)\n", + " os.remove(file_name)\n", + "\n", + " # 每一个epoch后,打印训练集的损失值和验证集的模型精度,并保存精度最好的ckpt文件\n", + " def epoch_end(self, run_context):\n", + " cb_params = run_context.original_args()\n", + " cur_epoch = cb_params.cur_epoch_num\n", + " loss_epoch = cb_params.net_outputs\n", + " if cur_epoch >= self.eval_start_epoch and (cur_epoch - self.eval_start_epoch) % self.interval == 0:\n", + " res = self.eval_function(self.eval_param_dict)\n", + " print('Epoch {}/{}'.format(cur_epoch, num_epochs))\n", + " print('-' * 10)\n", + " print('train Loss: {}'.format(loss_epoch))\n", + " print('val Acc: {}'.format(res))\n", + " self.losslist.append(loss_epoch)\n", + " self.aclist.append(res)\n", + " if res >= self.best_res:\n", + " self.best_res = res\n", + " self.best_epoch = cur_epoch\n", + " if self.save_best_ckpt:\n", + " if os.path.exists(self.best_ckpt_path):\n", + " self.remove_ckpoint_file(self.best_ckpt_path)\n", + " save_checkpoint(cb_params.train_network, self.best_ckpt_path)\n", + "\n", + " # 训练结束后,打印最好的精度和对应的epoch\n", + " def end(self, run_context):\n", + " x=range(len(self.losslist))\n", + " lossl=[]\n", + " for l in self.losslist:\n", + " lossl.append(l.asnumpy())\n", + " acl=[]\n", + " for a in self.aclist:\n", + " acl.append(a)\n", + " plt.plot(x, lossl, color='green', marker='o', linestyle='solid')\n", + " plt.title('train loss')\n", + " plt.xlabel('epoch')\n", + " plt.ylabel('loss')\n", + " plt.show()\n", + " plt.plot(x, acl, color='green', marker='o', linestyle='solid')\n", + " plt.title('val acc')\n", + " plt.xlabel('epoch')\n", + " plt.ylabel('acc')\n", + " plt.show()\n", + " print(\"End training, the best {0} is: {1}, the best {0} epoch is {2}\".format(self.metrics_name,\n", + " self.best_res,\n", + " self.best_epoch), flush=True)\n", + "def filter_checkpoint_parameter_by_list(origin_dict, param_filter):\n", + " for key in list(origin_dict.keys()):\n", + " for name in param_filter:\n", + " if name in key:\n", + " print(\"Delete parameter from checkpoint: \", key)\n", + " del origin_dict[key]\n", + " break\n", + "net = resnet50(11,200)\n", + "num_epochs=50\n", + "train_data_path = 'data/train'\n", + "val_data_path = 'data/val'\n", + "# 加载预训练模型\n", + "#param_dict = load_checkpoint('resnet50.ckpt')\n", + "\n", + "# 获取全连接层的名字\n", + "#filter_list = [x.name for x in net.end_point.get_parameters()]\n", + "\n", + "# 删除预训练模型的全连接层\n", + "#filter_checkpoint_parameter_by_list(param_dict, filter_list)\n", + "\n", + "# 给网络加载参数\n", + "#load_param_into_net(net,param_dict)\n", + "\n", + "# 定义优化器和损失函数\n", + "opt = nn.Momentum(params=net.trainable_params(), learning_rate=0.001, momentum=0.9)\n", + "loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True,reduction='mean')\n", + "\n", + "# 实例化模型\n", + "model = Model(net, loss,opt,metrics={\"Accuracy\":nn.Accuracy()})\n", + "train_ds = create_dataset(train_data_path)\n", + "val_ds = create_dataset(val_data_path)\n", + "eval_param_dict = {\"model\":model,\"dataset\":val_ds,\"metrics_name\":\"Accuracy\"}\n", + "eval_cb = EvalCallBack(apply_eval, eval_param_dict,)\n", + "\n", + "# 训练模型\n", + "model.train(num_epochs,train_ds, callbacks=[eval_cb, TimeMonitor()], dataset_sink_mode=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e864de6", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "import stat\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import mindspore.ops as ops\n", + "import mindspore.nn as nn\n", + "import mindspore.dataset as ds\n", + "import mindspore.dataset.vision.c_transforms as CV\n", + "import mindspore.dataset.transforms.c_transforms as C\n", + "from mindspore.dataset.vision import Inter\n", + "from mindspore.common.initializer import Normal\n", + "from mindspore import dtype as mstype\n", + "from mindspore.train.callback import TimeMonitor, Callback\n", + "from mindspore import Model, Tensor, context, save_checkpoint, load_checkpoint, load_param_into_net\n", + "import numpy as np\n", + "import mindspore.nn as nn\n", + "from mindspore import Tensor\n", + "import mindspore.ops as ops\n", + "from matplotlib import pyplot as plt\n", + "def create_dataset(data_path, batch_size=20, repeat_num=1, training=True):\n", + " \"\"\"定义数据集\"\"\"\n", + " data_set = ds.ImageFolderDataset(data_path, num_parallel_workers=8, shuffle=True)\n", + "\n", + " # 对数据进行增强操作\n", + " image_size = 200\n", + " mean = [0.485 * 255, 0.456 * 255, 0.406 * 255]\n", + " std = [0.229 * 255, 0.224 * 255, 0.225 * 255]\n", + " if training:\n", + " trans = [\n", + " CV.RandomCropDecodeResize(image_size, scale=(0.08, 1.0), ratio=(0.75, 1.333)),\n", + " CV.RandomHorizontalFlip(prob=0.5),\n", + " CV.Normalize(mean=mean, std=std),\n", + " CV.HWC2CHW()\n", + " ]\n", + " else:\n", + " trans = [\n", + " CV.Decode(),\n", + " CV.Resize(200),\n", + " CV.CenterCrop(image_size),\n", + " CV.HWC2CHW()\n", + " ]\n", + " type_cast_op = C.TypeCast(mstype.int32)\n", + "\n", + " # 实现数据的map映射、批量处理和数据重复的操作\n", + " data_set = data_set.map(operations=trans, input_columns=\"image\", num_parallel_workers=8)\n", + " data_set = data_set.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=8)\n", + " data_set = data_set.batch(batch_size, drop_remainder=True)\n", + " data_set = data_set.repeat(repeat_num)\n", + "\n", + " return data_set\n", + "def weight_variable_0(shape):\n", + " \"\"\"weight_variable_0\"\"\"\n", + " zeros = np.zeros(shape).astype(np.float32)\n", + " return Tensor(zeros)\n", + "\n", + "\n", + "def weight_variable_1(shape):\n", + " \"\"\"weight_variable_1\"\"\"\n", + " ones = np.ones(shape).astype(np.float32)\n", + " return Tensor(ones)\n", + "\n", + "\n", + "def conv3x3(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"3x3 convolution \"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=3, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def conv1x1(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"1x1 convolution\"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=1, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def conv7x7(in_channels, out_channels, stride=1, padding=0):\n", + " \"\"\"1x1 convolution\"\"\"\n", + " return nn.Conv2d(in_channels, out_channels,\n", + " kernel_size=7, stride=stride, padding=padding, weight_init='XavierUniform',\n", + " has_bias=False, pad_mode=\"same\")\n", + "\n", + "\n", + "def bn_with_initialize(out_channels):\n", + " \"\"\"bn_with_initialize\"\"\"\n", + " shape = (out_channels)\n", + " mean = weight_variable_0(shape)\n", + " var = weight_variable_1(shape)\n", + " beta = weight_variable_0(shape)\n", + " bn = nn.BatchNorm2d(out_channels, momentum=0.99, eps=0.00001, gamma_init='Uniform',\n", + " beta_init=beta, moving_mean_init=mean, moving_var_init=var)\n", + " return bn\n", + "\n", + "\n", + "def bn_with_initialize_last(out_channels):\n", + " \"\"\"bn_with_initialize_last\"\"\"\n", + " shape = (out_channels)\n", + " mean = weight_variable_0(shape)\n", + " var = weight_variable_1(shape)\n", + " beta = weight_variable_0(shape)\n", + " bn = nn.BatchNorm2d(out_channels, momentum=0.99, eps=0.00001, gamma_init='Uniform',\n", + " beta_init=beta, moving_mean_init=mean, moving_var_init=var)\n", + " return bn\n", + "\n", + "\n", + "def fc_with_initialize(input_channels, out_channels):\n", + " \"\"\"fc_with_initialize\"\"\"\n", + " return nn.Dense(input_channels, out_channels, weight_init='XavierUniform', bias_init='Uniform')\n", + "\n", + "\n", + "class ResidualBlock(nn.Cell):\n", + " \"\"\"ResidualBlock\"\"\"\n", + " expansion = 4\n", + "\n", + " def __init__(self,\n", + " in_channels,\n", + " out_channels,\n", + " stride=1):\n", + " \"\"\"init block\"\"\"\n", + " super(ResidualBlock, self).__init__()\n", + "\n", + " out_chls = out_channels // self.expansion\n", + " self.conv1 = conv1x1(in_channels, out_chls, stride=stride, padding=0)\n", + " self.bn1 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv2 = conv3x3(out_chls, out_chls, stride=1, padding=0)\n", + " self.bn2 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv3 = conv1x1(out_chls, out_channels, stride=1, padding=0)\n", + " self.bn3 = bn_with_initialize_last(out_channels)\n", + "\n", + " self.relu = ops.ReLU()\n", + " self.add = ops.Add()\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " identity = x\n", + "\n", + " out = self.conv1(x)\n", + " out = self.bn1(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv2(out)\n", + " out = self.bn2(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv3(out)\n", + " out = self.bn3(out)\n", + "\n", + " out = self.add(out, identity)\n", + " out = self.relu(out)\n", + "\n", + " return out\n", + "\n", + "\n", + "class ResidualBlockWithDown(nn.Cell):\n", + " \"\"\"ResidualBlockWithDown\"\"\"\n", + " expansion = 4\n", + "\n", + " def __init__(self,\n", + " in_channels,\n", + " out_channels,\n", + " stride=1,\n", + " down_sample=False):\n", + " \"\"\"init block with down\"\"\"\n", + " super(ResidualBlockWithDown, self).__init__()\n", + "\n", + " out_chls = out_channels // self.expansion\n", + " self.conv1 = conv1x1(in_channels, out_chls, stride=stride, padding=0)\n", + " self.bn1 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv2 = conv3x3(out_chls, out_chls, stride=1, padding=0)\n", + " self.bn2 = bn_with_initialize(out_chls)\n", + "\n", + " self.conv3 = conv1x1(out_chls, out_channels, stride=1, padding=0)\n", + " self.bn3 = bn_with_initialize_last(out_channels)\n", + "\n", + " self.relu = ops.ReLU()\n", + " self.down_sample = down_sample\n", + "\n", + " self.conv_down_sample = conv1x1(in_channels, out_channels, stride=stride, padding=0)\n", + " self.bn_down_sample = bn_with_initialize(out_channels)\n", + " self.add = ops.Add()\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " identity = x\n", + "\n", + " out = self.conv1(x)\n", + " out = self.bn1(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv2(out)\n", + " out = self.bn2(out)\n", + " out = self.relu(out)\n", + "\n", + " out = self.conv3(out)\n", + " out = self.bn3(out)\n", + "\n", + " identity = self.conv_down_sample(identity)\n", + " identity = self.bn_down_sample(identity)\n", + "\n", + " out = self.add(out, identity)\n", + " out = self.relu(out)\n", + "\n", + " return out\n", + "\n", + "\n", + "class MakeLayer0(nn.Cell):\n", + " \"\"\"MakeLayer0\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer0, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=1, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=stride)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer1(nn.Cell):\n", + " \"\"\"MakeLayer1\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer1, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + " self.d = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + " x = self.d(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer2(nn.Cell):\n", + " \"\"\"MakeLayer2\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer2, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + " self.d = block(out_channels, out_channels, stride=1)\n", + " self.e = block(out_channels, out_channels, stride=1)\n", + " self.f = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + " x = self.d(x)\n", + " x = self.e(x)\n", + " x = self.f(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class MakeLayer3(nn.Cell):\n", + " \"\"\"MakeLayer3\"\"\"\n", + "\n", + " def __init__(self, block, in_channels, out_channels, stride):\n", + " \"\"\"init\"\"\"\n", + " super(MakeLayer3, self).__init__()\n", + " self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)\n", + " self.b = block(out_channels, out_channels, stride=1)\n", + " self.c = block(out_channels, out_channels, stride=1)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.a(x)\n", + " x = self.b(x)\n", + " x = self.c(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "class ResNet(nn.Cell):\n", + " \"\"\"ResNet\"\"\"\n", + "\n", + " def __init__(self, block, num_classes=100, batch_size=32):\n", + " \"\"\"init\"\"\"\n", + " super(ResNet, self).__init__()\n", + " self.batch_size = batch_size\n", + " self.num_classes = num_classes\n", + "\n", + " self.conv1 = conv7x7(3, 64, stride=2, padding=0)\n", + "\n", + " self.bn1 = bn_with_initialize(64)\n", + " self.relu = ops.ReLU()\n", + " self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, pad_mode=\"same\")\n", + "\n", + " self.layer1 = MakeLayer0(block, in_channels=64, out_channels=256, stride=1)\n", + " self.layer2 = MakeLayer1(block, in_channels=256, out_channels=512, stride=2)\n", + " self.layer3 = MakeLayer2(block, in_channels=512, out_channels=1024, stride=2)\n", + " self.layer4 = MakeLayer3(block, in_channels=1024, out_channels=2048, stride=2)\n", + "\n", + " self.pool = ops.ReduceMean(keep_dims=True)\n", + " self.squeeze = ops.Squeeze(axis=(2, 3))\n", + " self.fc = fc_with_initialize(512 * block.expansion, num_classes)\n", + "\n", + " def construct(self, x):\n", + " \"\"\"construct\"\"\"\n", + " x = self.conv1(x)\n", + " x = self.bn1(x)\n", + " x = self.relu(x)\n", + " x = self.maxpool(x)\n", + "\n", + " x = self.layer1(x)\n", + " x = self.layer2(x)\n", + " x = self.layer3(x)\n", + " x = self.layer4(x)\n", + "\n", + " x = self.pool(x, (2, 3))\n", + " x = self.squeeze(x)\n", + " x = self.fc(x)\n", + " return x\n", + "\n", + "\n", + "def resnet50(batch_size, num_classes):\n", + " \"\"\"create resnet50\"\"\"\n", + " return ResNet(ResidualBlock, num_classes, batch_size)\n", + "def visualize_model(best_ckpt_path,val_ds):\n", + " # 定义网络并加载参数,对验证集进行预测\n", + " net = resnet50(12,200)\n", + " param_dict = load_checkpoint(best_ckpt_path)\n", + " load_param_into_net(net,param_dict)\n", + " loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True,reduction='mean')\n", + " model = Model(net, loss,metrics={\"Accuracy\":nn.Accuracy()})\n", + " data = next(val_ds.create_dict_iterator())\n", + " images = data[\"image\"].asnumpy()\n", + " labels = data[\"label\"].asnumpy()\n", + " class_name = {1:\"agriculture\",2:\"commercial\",3:\"river\",4:\"water\",5:\"harbor\",6:\"idle_land\",7:\"industrial\",8:\"park\",9:\"pond\",10:\"residential\",11:\"river\",12:\"water\"}\n", + " output = model.predict(Tensor(data['image']))\n", + " pred = np.argmax(output.asnumpy(),axis=1)\n", + " # 可视化模型预测\n", + " plt.figure(dpi=300,figsize=(24,5))\n", + " for i in range(len(labels)):\n", + " plt.subplot(2,10,i+1)\n", + " color = 'blue' if pred[i] == labels[i] else 'red'\n", + " plt.title('{}'.format(class_name[pred[i]]), color=color)\n", + " plt.imshow( images[i].transpose(1,2,0))\n", + " plt.axis('off')\n", + " plt.show()\n", + "val_data_path = 'data/val'\n", + "val_ds = create_dataset(val_data_path)\n", + "visualize_model('best.ckpt', val_ds)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78c041d0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MindSpore", + "language": "python", + "name": "mindspore" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- Gitee