Proyek Machine Learning

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

Ahmad Munif, Bekasi (ahmad.munif02@gmail.

com)

import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import pandas as pd

!wget --no-check-certificate \
https://github.com/dicodingacademy/assets/releases/download/release/rockpaperscissors.zip
-O /tmp/rockpaperscissors.zip

--2022-10-11 02:09:19-- https://github.com/dicodingacademy/assets/releases/download/


Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65b
--2022-10-11 02:09:20-- https://objects.githubusercontent.com/github-production-rele
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.11
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.1
HTTP request sent, awaiting response... 200 OK
Length: 322873683 (308M) [application/octet-stream]
Saving to: ‘/tmp/rockpaperscissors.zip’

/tmp/rockpapersciss 100%[===================>] 307.92M 33.3MB/s in 9.2s

2022-10-11 02:09:29 (33.4 MB/s) - ‘/tmp/rockpaperscissors.zip’ saved [322873683/32287

!pip install split_folders

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/p


Collecting split_folders
Downloading split_folders-0.5.1-py3-none-any.whl (8.4 kB)
Installing collected packages: split-folders
Successfully installed split-folders-0.5.1

# melakukan ekstraksi pada file zip


import zipfile,os
local_zip = '/tmp/rockpaperscissors.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()

import splitfolders
base_dir = '/tmp/rockpaperscissors/rps-cv-images'
splitfolders.ratio(base_dir, output='/tmp/rockpaperscissors', seed=1337, ratio=(.6,.4))

train_dir = os.path.join('/tmp/rockpaperscissors','train')
validation_dir = os.path.join('/tmp/rockpaperscissors','val')
Copying files: 2188 files [00:00, 4174.73 files/s]

rock_dir = os.path.join(base_dir,'rock')
paper_dir = os.path.join(base_dir,'paper')
scissors_dir = os.path.join(base_dir,'scissors')

os.listdir('/tmp/rockpaperscissors/train')

['scissors', 'paper', 'rock']

os.listdir('/tmp/rockpaperscissors/val')

['scissors', 'paper', 'rock']

#membuat direktori train


train_paper_dir = os.path.join(train_dir, 'paper')
train_rock_dir = os.path.join(train_dir, 'rock')
train_scissors_dir = os.path.join(train_dir, 'scissors')

#membuat direktori validation


validation_paper_dir = os.path.join(validation_dir, 'paper')
validation_rock_dir = os.path.join(validation_dir, 'rock')
validation_scissors_dir = os.path.join(validation_dir, 'scissors')

train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
horizontal_flip=True,
shear_range = 0.2,
fill_mode='wrap',
validation_split=0.4)

test_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
horizontal_flip=True,
shear_range = 0.2,
fill_mode='nearest',
validation_split=0.4)

train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=4,
class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=4,
class_mode='categorical')
Found 1312 images belonging to 3 classes.
Found 876 images belonging to 3 classes.

model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32,(3,3), activation='relu', in
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64,(3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128,(3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128,(3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(1, activation='softmax')
])

model.compile(loss='categorical_crossentropy',
optimizer='RMSprop',
metrics=['accuracy'])

model.fit(
train_generator,
steps_per_epoch=25, # berapa batch yang akan dieksekusi pada setiap epoch
epochs=20, # tambahkan epochs jika akurasi model belum optimal
validation_data=validation_generator, # menampilkan akurasi pengujian data validasi
validation_steps=5, # berapa batch yang akan dieksekusi pada setiap epoch
verbose=2)

Epoch 1/20
25/25 - 5s - loss: 1.2690 - accuracy: 0.6533 - val_loss: 1.0917 - val_accuracy: 0.666
Epoch 2/20
25/25 - 4s - loss: 1.1057 - accuracy: 0.6667 - val_loss: 1.0994 - val_accuracy: 0.666
Epoch 3/20
25/25 - 4s - loss: 1.0992 - accuracy: 0.6667 - val_loss: 1.0974 - val_accuracy: 0.666
Epoch 4/20
25/25 - 5s - loss: 1.1010 - accuracy: 0.6667 - val_loss: 1.0961 - val_accuracy: 0.666
Epoch 5/20
25/25 - 4s - loss: 1.0977 - accuracy: 0.6667 - val_loss: 1.0906 - val_accuracy: 0.666
Epoch 6/20
25/25 - 5s - loss: 0.9938 - accuracy: 0.7067 - val_loss: 1.2612 - val_accuracy: 0.650
Epoch 7/20
25/25 - 4s - loss: 0.9383 - accuracy: 0.7167 - val_loss: 0.7676 - val_accuracy: 0.800
Epoch 8/20
25/25 - 4s - loss: 0.7236 - accuracy: 0.7933 - val_loss: 0.6676 - val_accuracy: 0.850
Epoch 9/20
25/25 - 4s - loss: 0.7221 - accuracy: 0.8033 - val_loss: 0.5314 - val_accuracy: 0.833
Epoch 10/20
25/25 - 4s - loss: 0.4939 - accuracy: 0.8900 - val_loss: 0.9466 - val_accuracy: 0.816
Epoch 11/20
25/25 - 4s - loss: 0.5789 - accuracy: 0.8767 - val_loss: 0.2382 - val_accuracy: 0.950
Epoch 12/20
25/25 - 4s - loss: 0.4530 - accuracy: 0.9200 - val_loss: 0.4419 - val_accuracy: 0.866
Epoch 13/20
25/25 - 4s - loss: 0.4622 - accuracy: 0.8933 - val_loss: 0.6759 - val_accuracy: 0.850
Epoch 14/20
25/25 - 4s - loss: 0.2966 - accuracy: 0.9233 - val_loss: 0.4845 - val_accuracy: 0.850
Epoch 15/20
25/25 - 4s - loss: 0.3686 - accuracy: 0.9133 - val_loss: 0.4463 - val_accuracy: 0.900
Epoch 16/20
25/25 - 4s - loss: 0.4796 - accuracy: 0.8900 - val_loss: 0.2544 - val_accuracy: 0.933
Epoch 17/20
25/25 - 4s - loss: 0.3699 - accuracy: 0.9367 - val_loss: 0.8356 - val_accuracy: 0.800
Epoch 18/20
25/25 - 4s - loss: 0.3919 - accuracy: 0.9133 - val_loss: 0.3052 - val_accuracy: 0.933
Epoch 19/20
25/25 - 4s - loss: 0.2491 - accuracy: 0.9533 - val_loss: 0.1985 - val_accuracy: 0.933
Epoch 20/20
25/25 - 4s - loss: 0.4349 - accuracy: 0.9200 - val_loss: 0.3196 - val_accuracy: 0.900
<keras.callbacks.History at 0x7f28e6229c90>

import numpy as np
from google.colab import files
from keras.preprocessing import image
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline

uploaded = files.upload()

for fn in uploaded.keys():

#Memprediksi gambar
path = fn
img = image.load_img(path, target_size=(150,150))
imgplot = plt.imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

images = np.vstack([x])
classes = model.predict(images, batch_size=10)

print(fn)
if classes[0][0]==1:
print('paper')
elif classes[0][1]==1:
print('rock')
elif classes[0][2]==1:
print('scissors')
Choose Files No file chosen Upload widget is only available when the cell has been
executed in the current browser session. Please rerun this cell to enable.
Saving download (3).jpg to download (3).jpg
download (3).jpg
paper

Colab paid products - Cancel contracts here

You might also like