{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\nimport tensorflow as tf\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.model_selection import train_test_split\nimport pickle\nimport os\nimport scipy\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2021-11-19T10:58:05.409676Z","iopub.status.busy":"2021-11-19T10:58:05.408163Z","iopub.status.idle":"2021-11-19T10:58:09.760617Z","shell.execute_reply":"2021-11-19T10:58:09.759528Z","shell.execute_reply.started":"2021-11-19T00:55:47.43624Z"},"papermill":{"duration":4.388382,"end_time":"2021-11-19T10:58:09.760771","exception":false,"start_time":"2021-11-19T10:58:05.372389","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#加载数据\ncifar = tf.keras.datasets.cifar10 \n(x_train10, y_train10), (x_test10, y_test10) = cifar.load_data()\n\n\n#查看形状\nx_train10.shape, y_train10.shape","metadata":{"execution":{"iopub.execute_input":"2021-11-19T10:58:09.827713Z","iopub.status.busy":"2021-11-19T10:58:09.826904Z","iopub.status.idle":"2021-11-19T10:58:19.632475Z","shell.execute_reply":"2021-11-19T10:58:19.631668Z","shell.execute_reply.started":"2021-11-19T00:55:52.028589Z"},"papermill":{"duration":9.83987,"end_time":"2021-11-19T10:58:19.632601","exception":false,"start_time":"2021-11-19T10:58:09.792731","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Bagging","metadata":{"papermill":{"duration":0.057392,"end_time":"2021-11-19T10:58:19.747697","exception":false,"start_time":"2021-11-19T10:58:19.690305","status":"completed"},"tags":[]}},{"cell_type":"code","source":"\n#随机拆分3份训练集\nx_train_1, x_discard, y_train_1, y_discard = train_test_split(\n    x_train10, y_train10,                # x_train10,x_train10是原始数据\n    test_size=0.4        \n)\nx_train_2, x_discard, y_train_2, y_discard = train_test_split(\n    x_train10, y_train10,                # x_train10,x_train10是原始数据\n    test_size=0.4        \n)\nx_train_3, x_discard, y_train_3, y_discard = train_test_split(\n    x_train10, y_train10,                # x_train10,x_train10是原始数据\n    test_size=0.4        # test_size默认是0.25\n)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T10:58:19.875849Z","iopub.status.busy":"2021-11-19T10:58:19.874909Z","iopub.status.idle":"2021-11-19T10:58:20.036381Z","shell.execute_reply":"2021-11-19T10:58:20.035758Z","shell.execute_reply.started":"2021-11-19T00:56:02.285656Z"},"papermill":{"duration":0.227389,"end_time":"2021-11-19T10:58:20.036514","exception":false,"start_time":"2021-11-19T10:58:19.809125","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#将数据转换为张量\ntf.convert_to_tensor(x_train_1)\ntf.convert_to_tensor(x_train_2)\ntf.convert_to_tensor(x_train_3)\ntf.convert_to_tensor(y_train_1)\ntf.convert_to_tensor(y_train_2)\ntf.convert_to_tensor(y_train_3)\ntf.convert_to_tensor(x_test10)\ntf.convert_to_tensor(y_test10)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T10:58:20.4089Z","iopub.status.busy":"2021-11-19T10:58:20.408054Z","iopub.status.idle":"2021-11-19T10:58:23.691536Z","shell.execute_reply":"2021-11-19T10:58:23.692126Z","shell.execute_reply.started":"2021-11-19T00:56:02.451136Z"},"papermill":{"duration":3.587198,"end_time":"2021-11-19T10:58:23.692286","exception":false,"start_time":"2021-11-19T10:58:20.105088","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 模型构建，模型为实验一中三个模型","metadata":{"papermill":{"duration":0.104147,"end_time":"2021-11-19T10:58:23.855521","exception":false,"start_time":"2021-11-19T10:58:23.751374","status":"completed"},"tags":[]}},{"cell_type":"code","source":"\nmodel1 = tf.keras.models.Sequential([                            \n  tf.keras.layers.Conv2D(128,(5,5),padding='same',input_shape=(32, 32, 3)),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.MaxPooling2D(2),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.MaxPooling2D(2),\n  tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n  tf.keras.layers.Conv2D(64,(5,5),padding='same'),\n  tf.keras.layers.MaxPooling2D(8),\n  tf.keras.layers.Dense(10,activation='softmax')\n])\n\n\nmodel2 = tf.keras.models.Sequential([                            \n    tf.keras.layers.Conv2D(192,(3,3),padding='same',input_shape=(32, 32, 3)),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.MaxPooling2D(2),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.Conv2D(192,(3,3),padding='same'),\n    tf.keras.layers.MaxPooling2D(2),\n    tf.keras.layers.Conv2D(128,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(64,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(8),\n    tf.keras.layers.Dense(10,activation='softmax')\n])\n\n\nmodel3 = tf.keras.models.Sequential([                            \n    tf.keras.layers.Conv2D(192,(5,5),padding='same',input_shape=(32, 32, 3)),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(4),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(64,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(8),\n    tf.keras.layers.Dense(10,activation='softmax')\n])\n\n","metadata":{"execution":{"iopub.execute_input":"2021-11-19T10:58:23.99226Z","iopub.status.busy":"2021-11-19T10:58:23.991644Z","iopub.status.idle":"2021-11-19T10:58:24.467323Z","shell.execute_reply":"2021-11-19T10:58:24.466766Z","shell.execute_reply.started":"2021-11-19T00:56:05.630296Z"},"papermill":{"duration":0.553825,"end_time":"2021-11-19T10:58:24.467455","exception":false,"start_time":"2021-11-19T10:58:23.91363","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models=[]\n\nmodel1.compile(optimizer='adam',\n          loss='sparse_categorical_crossentropy',\n          metrics=['accuracy'])\nmodel1.fit(x_train_1,y_train_1,epochs=1, batch_size=800)\nmodel1.evaluate(x_test10, y_test10)\nmodels.append(model1)\n\nmodel2.compile(optimizer='adam',\n          loss='sparse_categorical_crossentropy',\n          metrics=['accuracy'])\nmodel2.fit(x_train_2,y_train_2,epochs=1, batch_size=800)\nmodel2.evaluate(x_test10, y_test10)\nmodels.append(model2)\n\nmodel3.compile(optimizer='adam',\n          loss='sparse_categorical_crossentropy',\n          metrics=['accuracy'])\nmodel3.fit(x_train_3,y_train_3,epochs=1, batch_size=800)\nmodel3.evaluate(x_test10, y_test10)\nmodels.append(model3)\n","metadata":{"execution":{"iopub.execute_input":"2021-11-19T10:58:24.595844Z","iopub.status.busy":"2021-11-19T10:58:24.594891Z","iopub.status.idle":"2021-11-19T11:00:32.780186Z","shell.execute_reply":"2021-11-19T11:00:32.779711Z","shell.execute_reply.started":"2021-11-19T00:56:06.107135Z"},"papermill":{"duration":128.253909,"end_time":"2021-11-19T11:00:32.780323","exception":false,"start_time":"2021-11-19T10:58:24.526414","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Predict labels with models\nlabels = []\nfor m in models:\n    predicts = m.predict(x_test10)\n    predicts = np.squeeze(predicts, 1)\n    predicts = np.squeeze(predicts, 1)\n    labels.append(np.argmax(predicts,axis=1))\n    print(predicts.shape)\n# Ensemble with voting\nlabels = np.array(labels)\n","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:33.132494Z","iopub.status.busy":"2021-11-19T11:00:33.129463Z","iopub.status.idle":"2021-11-19T11:00:45.57761Z","shell.execute_reply":"2021-11-19T11:00:45.578297Z","shell.execute_reply.started":"2021-11-18T02:33:35.618064Z"},"papermill":{"duration":12.64925,"end_time":"2021-11-19T11:00:45.578537","exception":false,"start_time":"2021-11-19T11:00:32.929287","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels_tra = np.transpose(labels, (1, 0))\nlabels_tra = scipy.stats.mode(labels_tra, axis=1)\nlabels_tra[0].shape","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:45.883781Z","iopub.status.busy":"2021-11-19T11:00:45.882955Z","iopub.status.idle":"2021-11-19T11:00:46.187802Z","shell.execute_reply":"2021-11-19T11:00:46.187301Z","shell.execute_reply.started":"2021-11-18T02:33:53.406363Z"},"papermill":{"duration":0.460296,"end_time":"2021-11-19T11:00:46.18803","exception":false,"start_time":"2021-11-19T11:00:45.727734","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"accuracy_score：\",accuracy_score(y_true=y_test10,y_pred=labels_tra[0]))","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:46.494711Z","iopub.status.busy":"2021-11-19T11:00:46.493429Z","iopub.status.idle":"2021-11-19T11:00:46.497146Z","shell.execute_reply":"2021-11-19T11:00:46.497727Z","shell.execute_reply.started":"2021-11-18T02:34:50.009333Z"},"papermill":{"duration":0.158978,"end_time":"2021-11-19T11:00:46.497897","exception":false,"start_time":"2021-11-19T11:00:46.338919","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Boosting","metadata":{"papermill":{"duration":0.149869,"end_time":"2021-11-19T11:00:46.799394","exception":false,"start_time":"2021-11-19T11:00:46.649525","status":"completed"},"tags":[]}},{"cell_type":"code","source":"y_train10.shape","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:47.107172Z","iopub.status.busy":"2021-11-19T11:00:47.106501Z","iopub.status.idle":"2021-11-19T11:00:47.109356Z","shell.execute_reply":"2021-11-19T11:00:47.109839Z","shell.execute_reply.started":"2021-11-18T13:18:43.822962Z"},"papermill":{"duration":0.16299,"end_time":"2021-11-19T11:00:47.11004","exception":false,"start_time":"2021-11-19T11:00:46.94705","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"random_seed = 2\nX_test=x_test10\nY_test=y_test10\nx_train, x_val, y_train, y_val= train_test_split(x_train10 , y_train10, test_size=0.1, random_state=random_seed)\nY_train_splits= np.split(y_train10,4)\nX_train_splits = np.split(x_train10, 4)\nprint(\"Total Rows(Images) in Test Data\")\nprint(X_test.shape)\nprint(\"Total Rows(Images) in Train Data\")\nprint(x_train10.shape)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:47.415153Z","iopub.status.busy":"2021-11-19T11:00:47.413144Z","iopub.status.idle":"2021-11-19T11:00:47.468738Z","shell.execute_reply":"2021-11-19T11:00:47.469346Z","shell.execute_reply.started":"2021-11-18T13:18:45.019148Z"},"papermill":{"duration":0.211945,"end_time":"2021-11-19T11:00:47.469541","exception":false,"start_time":"2021-11-19T11:00:47.257596","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n## 将标签和图像拆分为 **4** 个相等的包 \n## 以 Pickle 的形式保存标签和图像 **Bags**。","metadata":{"papermill":{"duration":0.15027,"end_time":"2021-11-19T11:00:47.7717","exception":false,"start_time":"2021-11-19T11:00:47.62143","status":"completed"},"tags":[]}},{"cell_type":"code","source":"for i in range(4):\n\n    Y_train_split=Y_train_splits[i]\n    pickle_out=open(\"Y_train_split_\"+str(i+1)+\".pickle\",\"wb\")\n    pickle.dump(Y_train_split,pickle_out)\n    pickle_out.close()\n\n    X_train_split = X_train_splits[i]\n    print(\"Total Rows(Images) in Bag \"+str(i+1))\n    print(X_train_splits[i].shape)\n    pickle_out2 = open(\"X_train_split_\" + str(i + 1) + \".pickle\", \"wb\")\n    pickle.dump(X_train_split, pickle_out2)\n    pickle_out2.close()","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:48.077803Z","iopub.status.busy":"2021-11-19T11:00:48.077047Z","iopub.status.idle":"2021-11-19T11:00:49.373749Z","shell.execute_reply":"2021-11-19T11:00:49.373229Z","shell.execute_reply.started":"2021-11-18T13:26:47.200939Z"},"papermill":{"duration":1.452319,"end_time":"2021-11-19T11:00:49.373966","exception":false,"start_time":"2021-11-19T11:00:47.921647","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 将 Bags 1 读作 B1\n\n\n1. 使用Pickle 读取 bag 1 .\n2. 对数据进行分割9：1. \n3. **X_train_B1, X_val_B1, Y_train_B1, Y_val_B1**</font>","metadata":{"papermill":{"duration":0.149873,"end_time":"2021-11-19T11:00:49.675398","exception":false,"start_time":"2021-11-19T11:00:49.525525","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"Y_train_split_1.pickle\", \"rb\")\nY_train_split = pickle.load(pickle_in)\npickle_in2 = open(\"X_train_split_1.pickle\", \"rb\")\nX_train_split = pickle.load(pickle_in2)\n\n#设置随机种子\nrandom_seed = 2\n# 拆分训练和验证 50% 为拟合设置\nX_train_B1, X_val_B1, Y_train_B1, Y_val_B1= train_test_split(X_train_split, Y_train_split, test_size=0.1, random_state=random_seed)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:49.979969Z","iopub.status.busy":"2021-11-19T11:00:49.978697Z","iopub.status.idle":"2021-11-19T11:00:50.008768Z","shell.execute_reply":"2021-11-19T11:00:50.008289Z","shell.execute_reply.started":"2021-11-18T13:30:29.372063Z"},"papermill":{"duration":0.184191,"end_time":"2021-11-19T11:00:50.0089","exception":false,"start_time":"2021-11-19T11:00:49.824709","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 将 Bags 2 读作 B2（如上所述）","metadata":{"papermill":{"duration":0.148548,"end_time":"2021-11-19T11:00:50.308997","exception":false,"start_time":"2021-11-19T11:00:50.160449","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"Y_train_split_2.pickle\", \"rb\")\nY_train_split = pickle.load(pickle_in)\npickle_in2 = open(\"X_train_split_2.pickle\", \"rb\")\nX_train_split = pickle.load(pickle_in2)\n\n\nrandom_seed = 2\nX_train_B2, X_val_B2, Y_train_B2, Y_val_B2= train_test_split(X_train_split, Y_train_split, test_size=0.1, random_state=random_seed)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:50.626834Z","iopub.status.busy":"2021-11-19T11:00:50.625849Z","iopub.status.idle":"2021-11-19T11:00:50.688269Z","shell.execute_reply":"2021-11-19T11:00:50.687751Z","shell.execute_reply.started":"2021-11-18T13:33:11.4502Z"},"papermill":{"duration":0.228048,"end_time":"2021-11-19T11:00:50.688396","exception":false,"start_time":"2021-11-19T11:00:50.460348","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 将 Bags 3 读作 B3（如上所述）","metadata":{"papermill":{"duration":0.150725,"end_time":"2021-11-19T11:00:50.989545","exception":false,"start_time":"2021-11-19T11:00:50.83882","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"Y_train_split_3.pickle\", \"rb\")\nY_train_split = pickle.load(pickle_in)\npickle_in2 = open(\"X_train_split_3.pickle\", \"rb\")\nX_train_split = pickle.load(pickle_in2)\n\n\nrandom_seed = 2\nX_train_B3, X_val_B3, Y_train_B3, Y_val_B3= train_test_split(X_train_split, Y_train_split, test_size=0.1, random_state=random_seed)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:51.294392Z","iopub.status.busy":"2021-11-19T11:00:51.293633Z","iopub.status.idle":"2021-11-19T11:00:51.362511Z","shell.execute_reply":"2021-11-19T11:00:51.36201Z","shell.execute_reply.started":"2021-11-18T13:39:37.241574Z"},"papermill":{"duration":0.223126,"end_time":"2021-11-19T11:00:51.362646","exception":false,"start_time":"2021-11-19T11:00:51.13952","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 将 Bags 4 读作 B4（如上所述）","metadata":{"papermill":{"duration":0.149724,"end_time":"2021-11-19T11:00:51.66416","exception":false,"start_time":"2021-11-19T11:00:51.514436","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"Y_train_split_4.pickle\", \"rb\")\nY_train_split = pickle.load(pickle_in)\npickle_in2 = open(\"X_train_split_4.pickle\", \"rb\")\nX_train_split = pickle.load(pickle_in2)\n\n\nrandom_seed = 2\nX_train_B4, X_val_B4, Y_train_B4, Y_val_B4= train_test_split(X_train_split, Y_train_split, test_size=0.1, random_state=random_seed)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:51.970573Z","iopub.status.busy":"2021-11-19T11:00:51.969669Z","iopub.status.idle":"2021-11-19T11:00:52.038206Z","shell.execute_reply":"2021-11-19T11:00:52.037663Z","shell.execute_reply.started":"2021-11-18T13:39:39.479877Z"},"papermill":{"duration":0.223933,"end_time":"2021-11-19T11:00:52.038337","exception":false,"start_time":"2021-11-19T11:00:51.814404","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 创建模型，使用普通方法进行训练，做对比","metadata":{"papermill":{"duration":0.148845,"end_time":"2021-11-19T11:00:52.337359","exception":false,"start_time":"2021-11-19T11:00:52.188514","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model1 = tf.keras.models.Sequential([                            \n    tf.keras.layers.Conv2D(192,(5,5),padding='same',input_shape=(32, 32, 3)),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(4),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(64,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(8),\n    tf.keras.layers.Dense(10,activation='softmax')\n])\n","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:52.656308Z","iopub.status.busy":"2021-11-19T11:00:52.655634Z","iopub.status.idle":"2021-11-19T11:00:52.722031Z","shell.execute_reply":"2021-11-19T11:00:52.721546Z","shell.execute_reply.started":"2021-11-18T13:39:44.793378Z"},"papermill":{"duration":0.234104,"end_time":"2021-11-19T11:00:52.722152","exception":false,"start_time":"2021-11-19T11:00:52.488048","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.compile(optimizer='adam',\n          loss='sparse_categorical_crossentropy',\n          metrics=['accuracy'])\nmodel1.fit(x_train,y_train,epochs=3, batch_size=800)\nmodel1.evaluate(X_test, Y_test)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:00:53.027442Z","iopub.status.busy":"2021-11-19T11:00:53.026516Z","iopub.status.idle":"2021-11-19T11:03:45.19349Z","shell.execute_reply":"2021-11-19T11:03:45.193923Z","shell.execute_reply.started":"2021-11-18T13:39:59.279968Z"},"papermill":{"duration":172.323304,"end_time":"2021-11-19T11:03:45.194117","exception":false,"start_time":"2021-11-19T11:00:52.870813","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Boosting方法\n**首先我们需要在 Bag 1（训练数据）上训练神经网络  \n在下一步中，我们将在 Bag 1（训练数据）上评估模型  \n找出错误预测的实例\n为了增加这些实例（图像）的权重，我们将这些实例（图像）包含在包 2 中  \n通过使用这种方法，模型将快速将其决策边界转移到错误分类的实例（图像）以纠正先前模型的错误**","metadata":{"papermill":{"duration":0.213675,"end_time":"2021-11-19T11:03:45.625438","exception":false,"start_time":"2021-11-19T11:03:45.411763","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model1 = tf.keras.models.Sequential([                            \n    tf.keras.layers.Conv2D(192,(5,5),padding='same',input_shape=(32, 32, 3)),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(4),\n    tf.keras.layers.Conv2D(192,(5,5),padding='same'),\n    tf.keras.layers.Conv2D(64,(5,5),padding='same'),\n    tf.keras.layers.MaxPooling2D(8),\n    tf.keras.layers.Dense(10,activation='softmax')\n])\n","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:03:46.074426Z","iopub.status.busy":"2021-11-19T11:03:46.069895Z","iopub.status.idle":"2021-11-19T11:03:46.140316Z","shell.execute_reply":"2021-11-19T11:03:46.139798Z","shell.execute_reply.started":"2021-11-18T13:51:01.10931Z"},"papermill":{"duration":0.300045,"end_time":"2021-11-19T11:03:46.140433","exception":false,"start_time":"2021-11-19T11:03:45.840388","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"开始训练... \")\nprint(\"在bag1中训练CNN... \")\nprint(\"bag1数据X shape\")\nprint(X_train_B1.shape)\nprint(\"bag1数据Y shape\")\nprint(Y_train_B1.shape)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:03:46.579345Z","iopub.status.busy":"2021-11-19T11:03:46.578666Z","iopub.status.idle":"2021-11-19T11:03:46.58171Z","shell.execute_reply":"2021-11-19T11:03:46.582156Z","shell.execute_reply.started":"2021-11-18T13:51:01.62666Z"},"papermill":{"duration":0.224308,"end_time":"2021-11-19T11:03:46.582288","exception":false,"start_time":"2021-11-19T11:03:46.35798","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.compile(optimizer='adam',\n          loss='sparse_categorical_crossentropy',\n          metrics=['accuracy'])\nmodel1.fit(X_train_B1,Y_train_B1,epochs=3, batch_size=800 ,validation_data=(X_val_B1, Y_val_B1))\nmodel1.save('custom_B1')","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:03:47.021059Z","iopub.status.busy":"2021-11-19T11:03:47.020217Z","iopub.status.idle":"2021-11-19T11:04:33.491106Z","shell.execute_reply":"2021-11-19T11:04:33.48855Z","shell.execute_reply.started":"2021-11-18T13:52:03.905908Z"},"papermill":{"duration":46.692924,"end_time":"2021-11-19T11:04:33.491276","exception":false,"start_time":"2021-11-19T11:03:46.798352","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(X_train_B1)-1):\n    model_predict=model1.predict( np.array( [X_train_B1[i],] ))\n    pred_classes = np.argmax(model_predict)\n    true=Y_train_B1[i]\n    if true != pred_classes:\n        X_train_B2=np.append(arr=X_train_B2, values=[X_train_B1[i]], axis=0)\n        Y_train_B2=np.append(arr=Y_train_B2, values=[Y_train_B1[i]], axis=0)\n\nprint(X_train_B2.shape)\nprint(Y_train_B2.shape)\n\npickle_out=open(\"X_train_B2.pickle\",\"wb\")\npickle.dump(X_train_B2,pickle_out)\npickle_out.close()\n\npickle_out2 = open(\"Y_train_B2.pickle\", \"wb\")\npickle.dump(Y_train_B2, pickle_out2)\npickle_out2.close()","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:04:33.958966Z","iopub.status.busy":"2021-11-19T11:04:33.958088Z","iopub.status.idle":"2021-11-19T11:14:39.961996Z","shell.execute_reply":"2021-11-19T11:14:39.962627Z","shell.execute_reply.started":"2021-11-18T13:57:47.070311Z"},"papermill":{"duration":606.239039,"end_time":"2021-11-19T11:14:39.962832","exception":false,"start_time":"2021-11-19T11:04:33.723793","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 读取 bag2","metadata":{"papermill":{"duration":0.226875,"end_time":"2021-11-19T11:14:40.417789","exception":false,"start_time":"2021-11-19T11:14:40.190914","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"X_train_B2.pickle\", \"rb\")\nX_train_B2 = pickle.load(pickle_in)\npickle_in2 = open(\"Y_train_B2.pickle\", \"rb\")\nY_train_B2 = pickle.load(pickle_in2)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:14:40.876859Z","iopub.status.busy":"2021-11-19T11:14:40.875983Z","iopub.status.idle":"2021-11-19T11:14:40.959781Z","shell.execute_reply":"2021-11-19T11:14:40.959334Z","shell.execute_reply.started":"2021-11-18T14:10:27.400413Z"},"papermill":{"duration":0.315485,"end_time":"2021-11-19T11:14:40.959905","exception":false,"start_time":"2021-11-19T11:14:40.64442","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 模型加载\n### 因为我们想将弱学习器转换为强学习器。我们需要以前模型的知识，因此我们将使用迁移学习方法。与上一步类似，我们将在 Bag 3 中包含这些实例（图像）","metadata":{"papermill":{"duration":0.226859,"end_time":"2021-11-19T11:14:41.418217","exception":false,"start_time":"2021-11-19T11:14:41.191358","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model1=tf.keras.models.load_model('custom_B1')\nprint(\"开始训练... \")\nprint(\"在bag2中训练CNN... \")\nprint(\"bag2数据X shape\")\nprint(X_train_B2.shape)\nprint(\"bag2数据Y shape\")\nprint(Y_train_B2.shape)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:14:41.882705Z","iopub.status.busy":"2021-11-19T11:14:41.881857Z","iopub.status.idle":"2021-11-19T11:14:42.469824Z","shell.execute_reply":"2021-11-19T11:14:42.470276Z","shell.execute_reply.started":"2021-11-18T14:11:06.161523Z"},"papermill":{"duration":0.823674,"end_time":"2021-11-19T11:14:42.470437","exception":false,"start_time":"2021-11-19T11:14:41.646763","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.fit(X_train_B2,Y_train_B2,epochs=3, batch_size=800,validation_data=(X_val_B2, Y_val_B2))\nmodel1.save('custom_B2')","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:14:42.934263Z","iopub.status.busy":"2021-11-19T11:14:42.931949Z","iopub.status.idle":"2021-11-19T11:16:07.342169Z","shell.execute_reply":"2021-11-19T11:16:07.341581Z","shell.execute_reply.started":"2021-11-18T14:11:10.511848Z"},"papermill":{"duration":84.642287,"end_time":"2021-11-19T11:16:07.342364","exception":false,"start_time":"2021-11-19T11:14:42.700077","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(X_train_B2)-1):\n    model_predict=model1.predict( np.array( [X_train_B2[i],] ))\n    pred_classes = np.argmax(model_predict)\n    #print(pred_classes)\n    true=Y_train_B2[i]\n    if true != pred_classes:\n        X_train_B3=np.append(arr=X_train_B3, values=[X_train_B2[i]], axis=0)\n        Y_train_B3=np.append(arr=Y_train_B3, values=[Y_train_B2[i]], axis=0)\n\nprint(X_train_B3.shape)\nprint(Y_train_B3.shape)\n\npickle_out=open(\"X_train_B3.pickle\",\"wb\")\npickle.dump(X_train_B3,pickle_out)\npickle_out.close()\n\npickle_out2 = open(\"Y_train_B3.pickle\", \"wb\")\npickle.dump(Y_train_B3, pickle_out2)\npickle_out2.close()","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:16:07.98802Z","iopub.status.busy":"2021-11-19T11:16:07.987207Z","iopub.status.idle":"2021-11-19T11:36:15.14331Z","shell.execute_reply":"2021-11-19T11:36:15.143799Z"},"papermill":{"duration":1207.4133,"end_time":"2021-11-19T11:36:15.143979","exception":false,"start_time":"2021-11-19T11:16:07.730679","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 读取 bag3","metadata":{"papermill":{"duration":0.250361,"end_time":"2021-11-19T11:36:15.698081","exception":false,"start_time":"2021-11-19T11:36:15.44772","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"X_train_B3.pickle\", \"rb\")\nX_train_B3 = pickle.load(pickle_in)\npickle_in2 = open(\"Y_train_B3.pickle\", \"rb\")\nY_train_B3 = pickle.load(pickle_in2)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:36:16.21139Z","iopub.status.busy":"2021-11-19T11:36:16.210397Z","iopub.status.idle":"2021-11-19T11:36:16.331886Z","shell.execute_reply":"2021-11-19T11:36:16.330721Z"},"papermill":{"duration":0.383264,"end_time":"2021-11-19T11:36:16.332058","exception":false,"start_time":"2021-11-19T11:36:15.948794","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 加载模型","metadata":{"papermill":{"duration":0.249907,"end_time":"2021-11-19T11:36:16.837923","exception":false,"start_time":"2021-11-19T11:36:16.588016","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model1=tf.keras.models.load_model('custom_B2')\nprint(\"开始训练... \")\nprint(\"在bag3中训练CNN... \")\nprint(\"bag3数据X shape\")\nprint(X_train_B3.shape)\nprint(\"bag3数据Y shape\")\nprint(Y_train_B3.shape)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:36:17.554685Z","iopub.status.busy":"2021-11-19T11:36:17.553785Z","iopub.status.idle":"2021-11-19T11:36:18.500173Z","shell.execute_reply":"2021-11-19T11:36:18.500706Z"},"papermill":{"duration":1.40347,"end_time":"2021-11-19T11:36:18.500856","exception":false,"start_time":"2021-11-19T11:36:17.097386","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.fit(X_train_B3,Y_train_B3,epochs=3, batch_size=800,validation_data=(X_val_B3, Y_val_B3))\nmodel1.save('custom_B3')","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:36:19.013246Z","iopub.status.busy":"2021-11-19T11:36:19.012298Z","iopub.status.idle":"2021-11-19T11:38:43.058857Z","shell.execute_reply":"2021-11-19T11:38:43.058358Z"},"papermill":{"duration":144.303318,"end_time":"2021-11-19T11:38:43.059025","exception":false,"start_time":"2021-11-19T11:36:18.755707","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(X_train_B3)-1):\n    model_predict=model1.predict( np.array( [X_train_B3[i],] ))\n    pred_classes = np.argmax(model_predict)\n    #print(pred_classes)\n    true=Y_train_B3[i]\n    if true != pred_classes:\n        X_train_B4=np.append(arr=X_train_B4, values=[X_train_B3[i]], axis=0)\n        Y_train_B4=np.append(arr=Y_train_B4, values=[Y_train_B3[i]], axis=0)\n\nprint(X_train_B4.shape)\nprint(Y_train_B4.shape)\n\npickle_out=open(\"X_train_B4.pickle\",\"wb\")\npickle.dump(X_train_B4,pickle_out)\npickle_out.close()\n\npickle_out2 = open(\"Y_train_B4.pickle\", \"wb\")\npickle.dump(Y_train_B4, pickle_out2)\npickle_out2.close()","metadata":{"execution":{"iopub.execute_input":"2021-11-19T11:38:43.635179Z","iopub.status.busy":"2021-11-19T11:38:43.634345Z","iopub.status.idle":"2021-11-19T12:08:01.257975Z","shell.execute_reply":"2021-11-19T12:08:01.25849Z"},"papermill":{"duration":1757.910283,"end_time":"2021-11-19T12:08:01.258648","exception":false,"start_time":"2021-11-19T11:38:43.348365","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 读取数据B4","metadata":{"papermill":{"duration":0.285747,"end_time":"2021-11-19T12:08:01.8293","exception":false,"start_time":"2021-11-19T12:08:01.543553","status":"completed"},"tags":[]}},{"cell_type":"code","source":"pickle_in = open(\"X_train_B4.pickle\", \"rb\")\nX_train_B4 = pickle.load(pickle_in)\npickle_in2 = open(\"Y_train_B4.pickle\", \"rb\")\nY_train_B4 = pickle.load(pickle_in2)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T12:08:02.410053Z","iopub.status.busy":"2021-11-19T12:08:02.409139Z","iopub.status.idle":"2021-11-19T12:08:02.549506Z","shell.execute_reply":"2021-11-19T12:08:02.549915Z"},"papermill":{"duration":0.434365,"end_time":"2021-11-19T12:08:02.550103","exception":false,"start_time":"2021-11-19T12:08:02.115738","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 加载模型B3，做最终训练","metadata":{"papermill":{"duration":0.285947,"end_time":"2021-11-19T12:08:03.123924","exception":false,"start_time":"2021-11-19T12:08:02.837977","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model1=tf.keras.models.load_model('custom_B3')\nprint(X_train_B4.shape)\nprint(Y_train_B4.shape)\nmodel1.fit(X_train_B4,Y_train_B4,epochs=3, batch_size=800,validation_data=(X_val_B4, Y_val_B4))","metadata":{"execution":{"iopub.execute_input":"2021-11-19T12:08:03.700855Z","iopub.status.busy":"2021-11-19T12:08:03.700094Z","iopub.status.idle":"2021-11-19T12:10:16.558684Z","shell.execute_reply":"2021-11-19T12:10:16.559138Z"},"papermill":{"duration":133.148913,"end_time":"2021-11-19T12:10:16.559312","exception":false,"start_time":"2021-11-19T12:08:03.410399","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 最终结果","metadata":{"papermill":{"duration":0.326638,"end_time":"2021-11-19T12:10:17.202847","exception":false,"start_time":"2021-11-19T12:10:16.876209","status":"completed"},"tags":[]}},{"cell_type":"code","source":"results = model1.evaluate(X_test, Y_test, batch_size=128)","metadata":{"execution":{"iopub.execute_input":"2021-11-19T12:10:17.839704Z","iopub.status.busy":"2021-11-19T12:10:17.837431Z","iopub.status.idle":"2021-11-19T12:10:23.059561Z","shell.execute_reply":"2021-11-19T12:10:23.059051Z","shell.execute_reply.started":"2021-11-18T14:16:55.041826Z"},"papermill":{"duration":5.538253,"end_time":"2021-11-19T12:10:23.059694","exception":false,"start_time":"2021-11-19T12:10:17.521441","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.352182,"end_time":"2021-11-19T12:10:23.998072","exception":false,"start_time":"2021-11-19T12:10:23.64589","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}