{"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":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))  #pwd input\n\nimport tensorflow as tf\nfrom tensorflow.keras.layers import (\n  Conv2D, MaxPool2D, Flatten, Dense)\nfrom tensorflow.keras import Model\nfrom matplotlib import pyplot as plt\nimport numpy as np\n\n#cross-entropy losses to categorical y \ntrain = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')\nx_tmp = train.drop('label',1)\ny_tmp = train.label\n\n\n#from sklearn.model_selection import train_test_split\n#x_train, x_valid, y_train, y_valid = train_test_split(x_train , y_train , test_size=0.2 , random_state=40 )\n#simply use fixed epoch then\n#x_train, x_valid, test = x_train / 255.0, x_valid / 255.0, test / 255.0\nx_train, test = x_tmp / 255.0, test / 255.0\nx_train.shape  #2D matrix\ny_train = y_tmp\nimg_size = 28\n\n#x_train = x_train[:1000].reshape(1000,28,28,1)\n#2 NHWC, need drop y first\nx_train = x_train.values.reshape(-1,img_size,img_size,1)\n#x_valid = x_valid.values.reshape(-1,img_size,img_size,1)\ntest = test.values.reshape(-1,img_size,img_size,1)\ntrain_ds = tf.data.Dataset.from_tensor_slices(\n    (x_train, y_train)).shuffle(10000).batch(128)\nplt.imshow(np.array(x_train[1]))\nplt.show()\n\n\n#class MyModel(tf.keras.Model), MyModel is self\n#initialize state & data\nclass VGG16(Model):\n#  def __init__(self,input_shape=(None,28,28,1), **kwargs):\n  def __init__(self):\n    super(VGG16, self).__init__()\n    self.conv11 = Conv2D(32, (3,3), activation='relu')\n    self.conv12 = Conv2D(64, (3,3), activation='relu')\n    self.pool1 = MaxPool2D(pool_size=[2, 2], strides=2)\n\n    self.conv21 = Conv2D(256, (3,3), activation='relu')\n    self.conv22 = Conv2D(256, (3,3), activation='relu', padding = 'same')\n    self.pool2 = MaxPool2D(strides=1)\n\n    self.conv31 = Conv2D(32, (3,3), padding='same')\n    self.flatten = Flatten()\n    self.d1 = Dense(128, activation='relu')\n    self.d2 = Dense(32, activation='relu')\n    self.d3 = Dense(10)\n\n#  @property\n#  def metrics(self):\n#  return [loss_tracker, mae_metric]\n\n\n  def call(self, x):\n    x = self.conv11(x)\n    x = self.conv12(x)\n    x = self.pool1(x)\n\n    x = self.conv21(x)\n    x = self.conv22(x)\n    x = self.pool2(x)\n\n    x = self.conv31(x)\n    x = self.flatten(x)\n    x = self.d1(x)\n    x = self.d2(x)\n    return self.d3(x)\n\n#optimizer help minimize loss function \nvgg = VGG16()\noptimizer = tf.keras.optimizers.Adam()\nloss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n\n#autograph: eager exe env speed up, & graph format exportable\n#model.compile\n@tf.function\ndef train_step(images, labels):\n  with tf.GradientTape() as tape:\n    predictions = vgg(images, training=True)\n    loss = loss_object(labels, predictions)\n  gradients = tape.gradient(loss, vgg.trainable_variables)\n  optimizer.apply_gradients(zip(gradients, vgg.trainable_variables))\n\n\nEPOCHS = 100\n#acc = np.zeros((EPOCHS, 2))\n#lss = np.zeros((EPOCHS, 2))\n\n\nfor epoch in range(EPOCHS):\n  for images, labels in train_ds:\n    train_step(images, labels)\n\n\n#vgg.compile(optimizer='adam', loss='mse', metrics=['mae'])\npredictions = vgg.predict(test)\ny = np.argmax(predictions,axis = 1)\n#2 yeah! <3\nsub = pd.read_csv('/kaggle/input/digit-recognizer/sample_submission.csv')\nsub['Label'] = y\nsub.to_csv(\"vggcon3.csv\", index=False)\nsub.head()\n\nfor i in range(10): \n  print(y[i])\n  plt.imshow(np.array(test[i]))\n  plt.show() \n\nvgg.summary()\n#print(vgg.layers[0].trainable_weights)\n#plot_ tfjs\n\n\nif False: '''\nfor i in range(10): \n  print(predictions[i])\n  plt.imshow(np.array(test[i]))\n  plt.show() \n#2 yeah! <3\n'''\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-01T05:24:49.531545Z","iopub.execute_input":"2022-07-01T05:24:49.531945Z","iopub.status.idle":"2022-07-01T05:30:30.371091Z","shell.execute_reply.started":"2022-07-01T05:24:49.531912Z","shell.execute_reply":"2022-07-01T05:30:30.370106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}