Neural Network - #3
This commit is contained in:
parent
de4d54d21d
commit
f416812251
63
Network3.py
Normal file
63
Network3.py
Normal file
@ -0,0 +1,63 @@
|
||||
import tensorflow as tf
|
||||
from tensorflow import keras
|
||||
from keras import layers
|
||||
|
||||
# Load and preprocess the dataset
|
||||
# Assuming you have three folders named 'class1', 'class2', and 'class3'
|
||||
# each containing images of their respective classes
|
||||
|
||||
data_dir = 'Training/'
|
||||
image_size = (100, 100)
|
||||
batch_size = 32
|
||||
|
||||
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
|
||||
data_dir,
|
||||
validation_split=0.2,
|
||||
subset="training",
|
||||
seed=123,
|
||||
image_size=image_size,
|
||||
batch_size=batch_size,
|
||||
)
|
||||
|
||||
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
|
||||
data_dir,
|
||||
validation_split=0.2,
|
||||
subset="validation",
|
||||
seed=123,
|
||||
image_size=image_size,
|
||||
batch_size=batch_size,
|
||||
)
|
||||
|
||||
class_names = train_ds.class_names
|
||||
num_classes = len(class_names)
|
||||
|
||||
|
||||
# Create the model
|
||||
model = keras.Sequential([
|
||||
layers.Rescaling(1./255, input_shape=(100, 100, 3)),
|
||||
layers.Conv2D(16, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Conv2D(32, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Conv2D(64, 3, padding='same', activation='relu'),
|
||||
layers.MaxPooling2D(),
|
||||
layers.Flatten(),
|
||||
layers.Dense(128, activation='relu'),
|
||||
layers.Dense(num_classes)
|
||||
])
|
||||
|
||||
# Compile the model
|
||||
model.compile(optimizer='adam',
|
||||
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
|
||||
metrics=['accuracy'])
|
||||
|
||||
# Train the model
|
||||
epochs = 10
|
||||
model.fit(
|
||||
train_ds,
|
||||
validation_data=val_ds,
|
||||
epochs=epochs
|
||||
)
|
||||
|
||||
# Save the trained model
|
||||
model.save('trained_model')
|
@ -10,7 +10,7 @@ train_ds = tf.keras.utils.image_dataset_from_directory(train_data_dir, validatio
|
||||
val_ds = tf.keras.utils.image_dataset_from_directory(train_data_dir, validation_split=0.2,
|
||||
subset="validation", seed=123, batch_size=32, image_size=(100, 100))
|
||||
|
||||
model = keras.models.load_model("trained_model")
|
||||
model = keras.models.load_model("trained_model.h5")
|
||||
predictions = model.predict(val_ds.take(32))
|
||||
|
||||
|
||||
|
52
network2.py
Normal file
52
network2.py
Normal file
@ -0,0 +1,52 @@
|
||||
import numpy as np
|
||||
import tensorflow as tf
|
||||
from tensorflow import keras
|
||||
from keras import layers
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def normalize(image, label):
|
||||
return image / 255, label
|
||||
|
||||
train_data_dir = "Training/"
|
||||
|
||||
train_ds = tf.keras.utils.image_dataset_from_directory(train_data_dir,
|
||||
validation_split=0.2, subset="training", seed=123, batch_size=32,
|
||||
image_size=(100, 100), color_mode='grayscale')
|
||||
|
||||
val_ds = tf.keras.utils.image_dataset_from_directory(train_data_dir,
|
||||
validation_split=0.2, subset="validation", seed=123, batch_size=32,
|
||||
image_size=(100, 100), color_mode='grayscale')
|
||||
|
||||
class_names = train_ds.class_names
|
||||
print(class_names)
|
||||
|
||||
train_ds = train_ds.map(normalize)
|
||||
val_ds = val_ds.map(normalize)
|
||||
|
||||
|
||||
model = keras.Sequential([
|
||||
layers.Conv2D(64, (3, 3), activation='relu', input_shape=(100, 100, 1)),
|
||||
layers.MaxPool2D((2, 2)),
|
||||
|
||||
layers.Conv2D(128, (3, 3), activation='relu'),
|
||||
layers.MaxPool2D((2, 2)),
|
||||
|
||||
layers.Conv2D(256, (3, 3), activation='relu'),
|
||||
layers.MaxPool2D((2, 2)),
|
||||
|
||||
layers.Flatten(),
|
||||
layers.Dense(1024, activation='relu'),
|
||||
layers.Dense(1, activation='sigmoid')
|
||||
])
|
||||
|
||||
print(model.summary())
|
||||
|
||||
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
|
||||
|
||||
trainHistory = model.fit(train_ds, epochs=10, validation_data=val_ds)
|
||||
|
||||
(loss, accuracy) = model.evaluate(val_ds)
|
||||
print(loss)
|
||||
print(accuracy)
|
||||
|
||||
model.save("mode2.h5")
|
57
testerZBS.py
Normal file
57
testerZBS.py
Normal file
@ -0,0 +1,57 @@
|
||||
import os
|
||||
import numpy as np
|
||||
import tensorflow as tf
|
||||
from tensorflow import keras
|
||||
|
||||
# Load the trained model
|
||||
model = keras.models.load_model('trained_model.h5')
|
||||
|
||||
# Load the class names
|
||||
class_names = ['Empty', 'Food','People']
|
||||
|
||||
# Load and preprocess the validation dataset
|
||||
data_dir = "Training/"
|
||||
image_size = (100, 100)
|
||||
batch_size = 32
|
||||
|
||||
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
|
||||
data_dir,
|
||||
validation_split=0.2,
|
||||
subset="validation",
|
||||
seed=123,
|
||||
image_size=image_size,
|
||||
batch_size=batch_size,
|
||||
)
|
||||
|
||||
# Select 20 random images from the validation set
|
||||
val_images = []
|
||||
val_labels = []
|
||||
for images, labels in val_ds.unbatch().shuffle(1000).take(60):
|
||||
val_images.append(images)
|
||||
val_labels.append(labels)
|
||||
|
||||
# Make predictions on the random images
|
||||
errorcount = 0
|
||||
for i in range(60):
|
||||
test_image = val_images[i]
|
||||
test_label = val_labels[i]
|
||||
test_image = np.expand_dims(test_image, axis=0)
|
||||
test_image = test_image / 255.0 # Normalize the image
|
||||
|
||||
# Make predictions
|
||||
predictions = model.predict(test_image)
|
||||
predicted_class_index = np.argmax(predictions[0])
|
||||
predicted_class = class_names[predicted_class_index]
|
||||
|
||||
true_class = class_names[test_label]
|
||||
|
||||
direct = 'Results/'
|
||||
filename = predicted_class + str(i) + '.jpeg'
|
||||
tf.keras.preprocessing.image.save_img(direct+filename, val_images[i])
|
||||
if predicted_class != true_class:
|
||||
errorcount += 1
|
||||
print('Image', i+1)
|
||||
print('True class:', true_class)
|
||||
print('Predicted class:', predicted_class)
|
||||
print()
|
||||
print('Error count: ', errorcount)
|
BIN
trained_model.h5
Normal file
BIN
trained_model.h5
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user