- import tensorflow as tf
- from tensorflow.keras.optimizers import RMSprop
- from tensorflow.keras.preprocessing.image import ImageDataGenerator
- from sklearn.model_selection import train_test_split
- import os
- !wget --no-check-certificate \
- https://dicodingacademy.blob.core.windows.net/picodiploma/ml_pemula_academy/rockpaperscissors.zip \
- -O /tmp/rockpaperscissors.zip
- import zipfile
- local_zip = '/tmp/rockpaperscissors.zip'
- zip_ref = zipfile.ZipFile(local_zip,'r')
- zip_ref.extractall('/tmp')
- zip_ref.close()
- base_dir ='/tmp/rockpaperscissors/rps-cv-images'
- os.listdir(base_dir)
- base_dir='/tmp/rockpaperscissors'
- train_dir=os.path.join(base_dir,'train')
- validation_dir=os.path.join(base_dir,'validation')
- rock_dir=os.path.join(base_dir,'rock')
- paper_dir=os.path.join(base_dir,'paper')
- scissor_dir=os.path.join(base_dir,'scissors')
- os.mkdir(train_dir)
- os.mkdir(validation_dir)
- train_rock=os.path.join(train_dir,'rock')
- train_paper=os.path.join(train_dir,'paper')
- train_scissor=os.path.join(train_dir,'scissor')
- val_rock=os.path.join(validation_dir,'rock')
- val_paper=os.path.join(validation_dir,'paper')
- val_scissor=os.path.join(validation_dir,'scissor')
- os.mkdir(train_rock)
- os.mkdir(train_paper)
- os.mkdir(train_scissor)
- os.mkdir(val_rock)
- os.mkdir(val_paper)
- os.mkdir(val_scissor)
- #split data rock dengan proporsi 60 40 antara train dan validation
- train_rock_dir,val_rock_dir=train_test_split(os.listdir(rock_dir), test_size=0.4)
- #split data paper dengan proporsi 60 40 antara train dan validation
- train_paper_dir,val_paper_dir=train_test_split(os.listdir(paper_dir), test_size=0.4)
- #split data scissor dengan proporsi 60 40 antara train dan validation
- train_scissor_dir,val_scissors_dir=train_test_split(os.listdir(scissor_dir),test_size=0.4)
- import tensorflow as tf
- print(tf.__version__)
- base_dir='/tmp/rockpaperscissors'
- train_dir=os.path.join(base_dir,'train')
- val_dir=os.path.join(base_dir,'validation')
- os.listdir(train_dir)
- os.listdir(val_dir)
- #membuat directory rock pada direktori data training
- train_rock_dir=os.path.join(train_dir,'rock')
- #membuat directory paper pada directory data training
- train_paper_dir=os.path.join(train_dir,'paper')
- #membuat directory scissor pada directory data training
- train_scissor_dir=os.path.join(train_dir,'scissors')
- #membuat directory rock pada directory data validasi
- val_rock_dir=os.path.join(val_dir,'rock')
- #membuat directory paper pada directory data validasi
- val_paper_dir=os.path.join(val_dir,'paper')
- #membuat directory scissor pada directory data validasi
- val_scissors_dir=os.path.join(val_dir,'scissor')
- from tensorflow.keras.preprocessing.image import ImageDataGenerator
- 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='wrap',
- validation_split=0.4)
- train_generator=train_datagen.flow_from_directory(
- base_dir,
- target_size=(150,150),
- class_mode='categorical',
- shuffle=True,
- subset='training'
- )
- validation_generator=test_datagen.flow_from_directory(
- base_dir,
- target_size=(150,150),
- class_mode='categorical',
- shuffle=True,
- subset='validation',
- )
- model = tf.keras.models.Sequential([
- tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
- 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(512, activation='relu'),
- tf.keras.layers.Dense(3, activation='softmax')
- ])
- # compile model dengan 'adam' optimizer loss function 'categorical_crossentropy'
- model.compile(loss='categorical_crossentropy',
- optimizer=tf.optimizers.Adam(),
- metrics=['accuracy'])
- # latih model dengan model.fit
- model.fit(
- train_generator,
- steps_per_epoch=25, # berapa batch yang akan dieksekusi pada setiap epoch
- epochs=20, # tambahkan eposchs 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)