# Praktikum 2

**Disclaimer**: Praktikum ini merupakan tutorial CNN dari Tensorflow yang dapat diakses pada laman <https://www.tensorflow.org/tutorials/images/cnn>

## Deskripsi

Pada praktikum ini kita akan membuat model CNN untuk mengklasifikasikan 10 objek dari dataset CIFAR. Dataset terdiri dari 60.000 citra dan setiap label terdiri dari 6.000 citra. Dataset telah dibagi menjadi 50.000 data training dan 10.000 data testing.

## Langkah 1 - Load Library

{% code overflow="wrap" lineNumbers="true" %}

```python
import tensorflow as tf

from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
```

{% endcode %}

## Langkah 2 - Unduh Dataset CIFAR

{% code overflow="wrap" lineNumbers="true" %}

```python
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0
```

{% endcode %}

## Langkah 3 - Verifikasi Data

{% code overflow="wrap" lineNumbers="true" %}

```python
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
               'dog', 'frog', 'horse', 'ship', 'truck']

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    # The CIFAR labels happen to be arrays, 
    # which is why you need the extra index
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()
```

{% endcode %}

## Langkah 4 - Buat Model CNN

### Langkah 4.1. - Buat Layer Konvolusi

{% code lineNumbers="true" %}

```python
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
```

{% endcode %}

### Langkah 4.2. - Cek Arsitektur Konvolusi

{% code overflow="wrap" lineNumbers="true" %}

```python
model.summary()
```

{% endcode %}

### Langkah 4.3. - Tambahkan Layer Fully Connected

{% code overflow="wrap" lineNumbers="true" %}

```python
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
```

{% endcode %}

### Langkah 4.4. - Cek Arsitektur Model CNN

{% code overflow="wrap" lineNumbers="true" %}

```python
model.summary()
```

{% endcode %}

### Langkah 4.5. - Compile Model CNN

{% code overflow="wrap" lineNumbers="true" %}

```python
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
```

{% endcode %}

## Langkah 5 - Fit Model

{% code overflow="wrap" lineNumbers="true" %}

```
history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))
```

{% endcode %}

## Langkah 6 - Evaluasi Model

{% code overflow="wrap" lineNumbers="true" %}

```python
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
```

{% endcode %}

Hasil proses training,

<figure><img src="https://www.tensorflow.org/static/tutorials/images/cnn_files/output_gtyDF0MKUcM7_1.png" alt=""><figcaption></figcaption></figure>

## Langkah 7 - Cetak Hasil Akurasi

{% code overflow="wrap" lineNumbers="true" %}

```python
print(test_acc)
```

{% endcode %}

Berapa akurasi yang Anda dapatkan?
