{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport tensorflow as tf\nimport os\nimport tensorflow_datasets as tfds\nfrom keras.utils import to_categorical","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Detect hardware, return appropriate distribution strategy\ntry:\n    # TPU detection. No parameters necessary if TPU_NAME environment variable is\n    # set: this is always the case on Kaggle.\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()\n    print('Running on TPU ', tpu.master())\nexcept ValueError:\n    tpu = None\n\nif tpu:\n    tf.config.experimental_connect_to_cluster(tpu)\n    tf.tpu.experimental.initialize_tpu_system(tpu)\n    strategy = tf.distribute.experimental.TPUStrategy(tpu)\nelse:\n    # Default distribution strategy in Tensorflow. Works on CPU and single GPU.\n    strategy = tf.distribute.get_strategy()\n\nprint(\"REPLICAS: \", strategy.num_replicas_in_sync)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def create_model():\n  return tf.keras.Sequential(\n      [tf.keras.layers.Conv2D(256, 3, activation='relu', input_shape=(28, 28, 1)),\n       tf.keras.layers.Conv2D(256, 3, activation='relu'),\n       tf.keras.layers.Flatten(),\n       tf.keras.layers.Dense(256, activation='relu'),\n       tf.keras.layers.Dense(128, activation='relu'),\n       tf.keras.layers.Dense(10)])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def create_CNNmodel():\n  return tf.keras.Sequential(\n      [tf.keras.layers.Conv2D(128, 5, activation='relu', input_shape=(28, 28, 1), padding='same'),\n       tf.keras.layers.MaxPooling2D(pool_size=(2,2), strides=(2,2)),\n       tf.keras.layers.Conv2D(64, 3, activation='relu', padding='same'),\n       tf.keras.layers.MaxPooling2D(pool_size=(2,2), strides=(2,2)),\n       tf.keras.layers.Flatten(),\n       tf.keras.layers.Dense(128, activation='relu'),\n       tf.keras.layers.Dropout(.5),\n       tf.keras.layers.Dense(62, activation='softmax')])    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_dataset(batch_size, is_training=True):\n  split = 'train' if is_training else 'test'\n  dataset, info = tfds.load(name='mnist', split=split, with_info=True,\n                            as_supervised=True, try_gcs=True)\n\n  def scale(image, label):\n    image = tf.cast(image, tf.float32)\n    image /= 255.0\n\n    return image, label\n\n  dataset = dataset.map(scale)\n\n  # Only shuffle and repeat the dataset in training. The advantage to have a\n  # infinite dataset for training is to avoid the potential last partial batch\n  # in each epoch, so users don't need to think about scaling the gradients\n  # based on the actual batch size.\n  if is_training:\n    dataset = dataset.shuffle(10000)\n    dataset = dataset.repeat()\n\n  dataset = dataset.batch(batch_size)\n\n  return dataset","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#with strategy.scope():\n#  model = create_model()\n#  model.compile(optimizer='adam',\n#                loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n#                metrics=['sparse_categorical_accuracy'])\n\n#batch_size = 200\n#steps_per_epoch = 60000 // batch_size\n#validation_steps = 10000 // batch_size\n\n#train_dataset = get_dataset(batch_size, is_training=True)\n#test_dataset = get_dataset(batch_size, is_training=False)\n\n#model.fit(train_dataset,\n#          epochs=5,\n#          steps_per_epoch=steps_per_epoch,\n#          validation_data=test_dataset, \n#          validation_steps=validation_steps)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Input data files are available in the \"/kaggle/input/108-1-dl-app-hw1/\" directory.\nDATA_DIR = '/kaggle/input/109-2-uta-dl-app-hw1/'\nTRAIN_DATA_FILE = DATA_DIR + 'emnist-byclass-train.npz'\nTEST_DATA_FILE = DATA_DIR + 'emnist-byclass-test.npz'\n\n# Load training data\n#data = np.load(TRAIN_DATA_FILE)\ndata = np.load('/kaggle/input/109-2-uta-dl-app-hw1/emnist-byclass-train.npz')\ntrain_labels = data['training_labels']\ntrain_images = data['training_images']\nprint(\"Shape labels:\", train_labels.shape)\nprint(\"Shape images:\", train_images.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"trn_images = train_images.reshape((train_images.shape[0], 28 * 28))\ntrn_images = trn_images.astype('float32') / 255\ntrn_labels = to_categorical(train_labels)\nprint(\"Shape labels:\", trn_labels.shape)\nprint(\"Shape images:\", trn_images.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#num_classes = 62\n# Constants\n#HEIGHT = 28\n#WIDTH = 28\n\n#with strategy.scope():\n#    model = create_CNNmodel()\n#    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n#    '''\n#    model = Sequential()\n\n#   #model.add(layers.Dense(512, activation='relu'))\n#    model.add(layers.Conv2D(filters=128, kernel_size=(5,5), padding = 'same', activation='relu',input_shape=(HEIGHT, WIDTH,1)))\n#    #model.add(layers.Conv2D(filters=128, kernel_size=(5,5), padding = 'same', activation='relu'))\n#    model.add(layers.MaxPooling2D(pool_size=(2,2), strides=(2,2)))\n#    model.add(layers.Conv2D(filters=64, kernel_size=(3,3) , padding = 'same', activation='relu'))\n#    model.add(layers.MaxPooling2D(pool_size=(2,2)))\n\n#    model.add(layers.Flatten())\n#    model.add(layers.Dense(units=128, activation='relu'))\n#    model.add(layers.Dropout(.5))\n#    model.add(layers.Dense(units=62, activation='softmax'))\n    \n#    model.summary()\n#    model.fit(train_images, trn_labels, epochs=10, batch_size=128, verbose=2)\n##history = model.fit(trn_images, trn_labels, epochs=10, batch_size=512, verbose=1, \\\n##                    validation_data=(val_x, val_y))\n#    '''\n#model.summary()\n#model.fit(train_images, trn_labels, epochs=2, batch_size=128, verbose=2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ls","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# instantiating the model in the strategy scope creates the model on the TPU\nwith strategy.scope():\n    # define your model normally\n    model= tf.keras.models.Sequential()\n    model.add(tf.keras.layers.Conv2D(32, kernel_size=(5, 5),activation='relu',input_shape=(28,28,1) ,padding='same'))\n    model.add(tf.keras.layers.Dropout(0.1))\n    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same'))\n    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(tf.keras.layers.Dropout(0.1))\n    model.add(tf.keras.layers.Flatten())\n    model.add(tf.keras.layers.Dense(128,activation='relu'))\n    model.add(tf.keras.layers.Dropout(0.15))\n    model.add(tf.keras.layers.Dense(62, activation='softmax'))\n    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"    # define your model normally\n    model= tf.keras.models.Sequential()\n    model.add(tf.keras.layers.Conv2D(32, kernel_size=(5, 5),activation='relu',input_shape=(28,28,1) ,padding='same'))\n    model.add(tf.keras.layers.Dropout(0.1))\n    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same'))\n    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(tf.keras.layers.Dropout(0.1))\n    model.add(tf.keras.layers.Flatten())\n    model.add(tf.keras.layers.Dense(128,activation='relu'))\n    model.add(tf.keras.layers.Dropout(0.15))\n    model.add(tf.keras.layers.Dense(62, activation='softmax'))\n    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#model= tf.keras.models.Sequential()\ncreate_CNNmodel()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])\nmodel.fit(trn_images, trn_labels, epochs=9,batch_size=128, verbose=2)    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Evalute our model on test data\ntest_images = numpy.load(TEST_DATA_FILE)['testing_images']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tst_images = test_images.reshape((test_images.shape[0], 28 * 28))\ntst_images = tst_images.astype('float32') / 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"results = model.predict_classes(test_images)\nresults","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Print results in CSV format and upload to Kaggle\nwith open('pred_results.csv', 'w') as f:\n    f.write('Id,Category\\n')\n    for i in range(len(results)):\n        f.write(str(i) + ',' + str(results[i]) + '\\n')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Download your results!\nfrom IPython.display import FileLink\nFileLink('pred_results.csv')","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}