Professional Documents
Culture Documents
Proyek Machine Learning
Proyek Machine Learning
Proyek Machine Learning
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
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')
os.listdir('/tmp/rockpaperscissors/val')
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