{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport numpy as np\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\ntrain = pd.read_csv('/kaggle/input/fashionmnist/fashion-mnist_train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_label = train.pop('label')\ntrain_label","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = np.array(train)\ntrain = np.reshape(train,(60000,28,28,1))\ntrain = tf.cast(train,tf.float32)\ntrain = train/255.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train[0].shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test = pd.read_csv('/kaggle/input/fashionmnist/fashion-mnist_test.csv')\ntest_label = test.pop('label')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data = np.array(test)\ntest_data = np.reshape(test_data,(10000,28,28,1))\ntest_data = tf.cast(test_data,tf.float32)\ntest_data = test_data/255.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tf.random.set_seed(2020)\nnp.random.seed(2020)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class simpleNet(tf.keras.Model):\n    def __init__(self):\n        super(simpleNet,self).__init__()\n        self.conv1 = layers.Conv2D(32,kernel_size=(3,3),strides=(1,1),padding='valid',activation='relu')\n        self.maxpool = layers.MaxPool2D(pool_size=(2,2))\n        self.dp = layers.Dropout(0.5)\n        self.avg = layers.AveragePooling2D()\n        self.fc1 = layers.Dense(32,activation='relu')\n        self.fc2 = layers.Dense(10,activation='softmax')\n    def call(self,inputs,training=None):\n        x = self.conv1(input1)\n        x = self.maxpool(x)\n        x = self.dp(x)\n        x = self.avg(x)\n        x = self.fc1(x)\n        x = self.fc2(x)\n        return x","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = tf.keras.Sequential()\nmodel.add(layers.Conv2D(input_shape=(28, 28, 1),\n                        filters=32, kernel_size=(3,3), strides=(1,1), padding='valid',\n                       activation='relu'))\nmodel.add(layers.MaxPool2D(pool_size=(2,2)))\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(32, activation='relu'))\nmodel.add(layers.Dense(10, activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_data = tf.data.Dataset.from_tensor_slices((train,train_label))\ntrain_data = train_data.shuffle(len(train)).batch(256).repeat()\nval_data = tf.data.Dataset.from_tensor_slices((test_data,test_label))\nval_data = val_data.batch(256)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cloth_dict = {0:'T-shirt/top',1:'Trouser',2:'Pullover',3:'Dress',4:'Coat',5:'Sandal',6:'Shirt',7:'Sneaker',8:'Bag',9:'Ankle boot'}\nfor img,label in train_data.take(1):\n    img1 = tf.reshape(img[15],(28,28))\n    label = label[15].numpy()\n    plt.imshow(img1)\n    plt.title(cloth_dict[label])\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer=keras.optimizers.Adam(),\n             # loss=keras.losses.CategoricalCrossentropy(),  # 需要使用to_categorical\n             loss=keras.losses.SparseCategoricalCrossentropy(),\n              metrics=['accuracy'])\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(train,np.array(train_label),shuffle=True,epochs=30,validation_split=0.2,validation_steps=30)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(14,7))\nplt.subplot(121)\nplt.plot(history.history['loss'],c='r',label='loss')\nplt.plot(history.history['val_loss'],c='g',label='val_loss')\nplt.legend()\nplt.subplot(122)\nplt.plot(history.history['accuracy'],c='r',label='acc')\nplt.plot(history.history['val_accuracy'],c='g',label='val_acc')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res = model.evaluate(test_data,test_label)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred = model.predict(test_data)\npred = [pred[i,:].argmax() for i in range(10000)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import accuracy_score\nscore = accuracy_score(pred,test_label)\nscore","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\nimport seaborn as sns\ncon_ma = confusion_matrix(test_label,pred)\nsns.heatmap(con_ma,annot=True,cmap='Blues')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data = pd.DataFrame({'scores':[res[1]]})\ndata.to_csv('/kaggle/working/fashion_mnist.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}