!wget https://storage.googleapis.com/ztm_tf_course/food_vision/10_food_classes_all_data.zip
import zipfile
with zipfile.ZipFile('10_food_classes_all_data.zip', 'r') as f:
f.extractall()
from tensorflow.keras.utils import image_dataset_from_directory
import tensorflow as tf
train_dir = '10_food_classes_all_data/train'
test_dir = '10_food_classes_all_data/test'
train_data = image_dataset_from_directory(train_dir)
test_data = image_dataset_from_directory(test_dir)
class_names = train_data.class_names
len(train_data), len(test_data), class_names
model = tf.keras.Sequential([
tf.keras.layers.Resizing(180, 180),
tf.keras.layers.Rescaling(1./255),
tf.keras.layers.Conv2D(10, 3, activation='relu'),
tf.keras.layers.Conv2D(10, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(10, 3, activation='relu'),
tf.keras.layers.Conv2D(10, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(len(class_names), activation='softmax')
])
model.compile(
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy']
)
history = model.fit(train_data, epochs=4, validation_data=test_data)
"""
Accuracy is not that greate but at lease it performs better than randomly
guessing
Epoch 1/5
235/235 [==============================] - 25s 93ms/step - loss: 2.1862 -
accuracy: 0.1849 - val_loss: 1.9902 - val_accuracy: 0.2952
Epoch 2/5
235/235 [==============================] - 25s 103ms/step - loss: 1.9091 -
accuracy: 0.3392 - val_loss: 1.8910 - val_accuracy: 0.3476
Epoch 3/5
235/235 [==============================] - 22s 93ms/step - loss: 1.6766 -
accuracy: 0.4292 - val_loss: 1.9594 - val_accuracy: 0.3304
Epoch 4/5
235/235 [==============================] - 23s 98ms/step - loss: 1.3300 -
accuracy: 0.5552 - val_loss: 2.2000 - val_accuracy: 0.3280
"""