Facebook
From Johnson Bangun, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 58
  1. import tensorflow as tf
  2. from tensorflow.keras.optimizers import RMSprop
  3. from tensorflow.keras.preprocessing.image import ImageDataGenerator
  4. from sklearn.model_selection import train_test_split
  5. import os
  6.  
  7. !wget --no-check-certificate \
  8.  https://dicodingacademy.blob.core.windows.net/picodiploma/ml_pemula_academy/rockpaperscissors.zip \
  9.  -O /tmp/rockpaperscissors.zip
  10.  
  11.  
  12. import zipfile
  13. local_zip = '/tmp/rockpaperscissors.zip'
  14. zip_ref = zipfile.ZipFile(local_zip,'r')
  15. zip_ref.extractall('/tmp')
  16. zip_ref.close()
  17.  
  18. base_dir ='/tmp/rockpaperscissors/rps-cv-images'
  19.  
  20. os.listdir(base_dir)
  21.  
  22. base_dir='/tmp/rockpaperscissors'
  23. train_dir=os.path.join(base_dir,'train')
  24. validation_dir=os.path.join(base_dir,'validation')
  25. rock_dir=os.path.join(base_dir,'rock')
  26. paper_dir=os.path.join(base_dir,'paper')
  27. scissor_dir=os.path.join(base_dir,'scissors')
  28.  
  29.  
  30. os.mkdir(train_dir)
  31. os.mkdir(validation_dir)
  32.  
  33. train_rock=os.path.join(train_dir,'rock')
  34. train_paper=os.path.join(train_dir,'paper')
  35. train_scissor=os.path.join(train_dir,'scissor')
  36. val_rock=os.path.join(validation_dir,'rock')
  37. val_paper=os.path.join(validation_dir,'paper')
  38. val_scissor=os.path.join(validation_dir,'scissor')
  39.  
  40. os.mkdir(train_rock)
  41. os.mkdir(train_paper)
  42. os.mkdir(train_scissor)
  43. os.mkdir(val_rock)
  44. os.mkdir(val_paper)
  45. os.mkdir(val_scissor)
  46.  
  47. #split data rock dengan proporsi 60 40  antara train dan validation
  48. train_rock_dir,val_rock_dir=train_test_split(os.listdir(rock_dir), test_size=0.4)
  49.  
  50. #split data paper dengan proporsi 60 40 antara train dan validation
  51. train_paper_dir,val_paper_dir=train_test_split(os.listdir(paper_dir), test_size=0.4)
  52.  
  53. #split data scissor dengan proporsi 60 40 antara train dan validation
  54. train_scissor_dir,val_scissors_dir=train_test_split(os.listdir(scissor_dir),test_size=0.4)
  55.  
  56. import tensorflow as tf
  57. print(tf.__version__)
  58.  
  59. base_dir='/tmp/rockpaperscissors'
  60. train_dir=os.path.join(base_dir,'train')
  61. val_dir=os.path.join(base_dir,'validation')
  62.  
  63. os.listdir(train_dir)
  64.  
  65. os.listdir(val_dir)
  66.  
  67. #membuat directory rock pada direktori data training
  68. train_rock_dir=os.path.join(train_dir,'rock')
  69.  
  70. #membuat directory paper pada directory data training
  71. train_paper_dir=os.path.join(train_dir,'paper')
  72.  
  73. #membuat directory scissor pada directory data training
  74. train_scissor_dir=os.path.join(train_dir,'scissors')
  75.  
  76. #membuat directory rock pada directory data validasi
  77. val_rock_dir=os.path.join(val_dir,'rock')
  78.  
  79. #membuat directory paper pada directory data validasi
  80. val_paper_dir=os.path.join(val_dir,'paper')
  81.  
  82. #membuat directory scissor pada directory data validasi
  83. val_scissors_dir=os.path.join(val_dir,'scissor')
  84.  
  85. from tensorflow.keras.preprocessing.image import ImageDataGenerator
  86.  
  87. train_datagen=ImageDataGenerator(
  88.                   rescale=1./255,
  89.                   rotation_range=20,
  90.                   horizontal_flip=True,
  91.                   shear_range=0.2,
  92.                   fill_mode='wrap',
  93.                   validation_split=0.4)
  94.  
  95. test_datagen=ImageDataGenerator(
  96.                   rescale=1./255,
  97.                   rotation_range=20,
  98.                   horizontal_flip=True,
  99.                   shear_range=0.2,
  100.                   fill_mode='wrap',
  101.                   validation_split=0.4)
  102.  
  103. train_generator=train_datagen.flow_from_directory(
  104.         base_dir,
  105.         target_size=(150,150),
  106.         class_mode='categorical',
  107.         shuffle=True,
  108.         subset='training'
  109.         )
  110.  
  111. validation_generator=test_datagen.flow_from_directory(
  112.         base_dir,
  113.         target_size=(150,150),
  114.         class_mode='categorical',
  115.         shuffle=True,
  116.         subset='validation',
  117.         )
  118.  
  119. model = tf.keras.models.Sequential([
  120.     tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
  121.     tf.keras.layers.MaxPooling2D(2, 2),
  122.     tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
  123.     tf.keras.layers.MaxPooling2D(2,2),
  124.     tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
  125.     tf.keras.layers.MaxPooling2D(2,2),
  126.     tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
  127.     tf.keras.layers.MaxPooling2D(2,2),
  128.     tf.keras.layers.Flatten(),
  129.     tf.keras.layers.Dense(512, activation='relu'),
  130.     tf.keras.layers.Dense(3, activation='softmax')
  131. ])
  132.  
  133. # compile model dengan 'adam' optimizer loss function 'categorical_crossentropy'
  134. model.compile(loss='categorical_crossentropy',
  135.               optimizer=tf.optimizers.Adam(),
  136.               metrics=['accuracy'])
  137.  
  138. # latih model dengan model.fit
  139. model.fit(
  140.       train_generator,
  141.       steps_per_epoch=25,  # berapa batch yang akan dieksekusi pada setiap epoch
  142.       epochs=20, # tambahkan eposchs jika akurasi model belum optimal
  143.       validation_data=validation_generator, # menampilkan akurasi pengujian data validasi
  144.       validation_steps=5,  # berapa batch yang akan dieksekusi pada setiap epoch
  145.       verbose=2)