from datasets import load_dataset import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from PIL import Image import json from tensorflow import keras import tensorflow_datasets as tfds from tensorflow.keras import layers from tensorflow.keras.models import Sequential (train_data, test_data), dataset_info = tfds.load(name = 'food101', split = ['train', 'validation'], shuffle_files = True, as_supervised = True, with_info = True) labels = dataset_info.features['label'].names num_labels = len(labels) def preprocess_img(image, label, img_size = 224): image = tf.image.resize(image, [img_size, img_size]) image = tf.cast(image, tf.float32) return image, label train_data = train_data.map(preprocess_img, num_parallel_calls = tf.data.AUTOTUNE).batch(batch_size = num_labels) test_data = test_data.map(preprocess_img, num_parallel_calls = tf.data.AUTOTUNE).batch(batch_size = num_labels) model = keras.Sequential() inputs = layers.Input(shape = (224, 224, 3)) layer1 = layers.GlobalAveragePooling2D() layer2 = layers.Dense(101, activation = 'relu') layer3 = layers.Activation('softmax', dtype = tf.float32) model.add(inputs) model.add(layer1) model.add(layer2) model.add(layer3) model.compile( loss = keras.losses.SparseCategoricalCrossentropy(from_logits = False), optimizer = keras.optimizers.legacy.Adam(learning_rate = 0.001), metrics = ['accuracy'], ) model.summary() model.fit(train_data, epochs=5, verbose = 2, batch_size=101) model.evaluate(test_data, batch_size=101) model.save("./foodTrain.pd") model.save_weights("./foodTrainWeights.h5") loaded_saved_model = tf.keras.models.load_model("./foodTrain.pd") results_loaded_saved_model = loaded_saved_model.evaluate(test_data) results_loaded_saved_model with open("config.json", "w") as outfile: json.dump(model.get_config(), outfile)