Учебные пособия по Tensorflow Keras CV работают неправильноPython

Программы на Python
Ответить
Anonymous
 Учебные пособия по Tensorflow Keras CV работают неправильно

Сообщение Anonymous »

У меня интересная ошибка. Я начинаю изучать машинное обучение с помощью Tensorflow Keras CV, и два моих учебных проекта работают неправильно.
Я использую эти уроки:

https://www.tensorflow.org/tutorials/load_data/images

https://www.tensorflow.org/tutorials/ke ... sification
И первый всегда говорит, что у меня есть одуванчик на картинка. Даже когда это розы или тюльпаны
А другой говорит, что у меня есть сумка. Даже если это брюки или футболка.
Оба проекта находятся в разных каталогах
flowers.py
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
import pickle
import pathlib

data_dir = pathlib.Path("C:/Users/admin/.keras/datasets/flower_photos")
image_count = len(list(data_dir.glob('*/*.jpg')))

batch_size = 32
img_height = 180
img_width = 180

train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)

val_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)

class_names = train_ds.class_names
print(class_names)

normalization_layer = tf.keras.layers.Rescaling(1./255)

normalized_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch = next(iter(normalized_ds))
first_image = image_batch[0]

AUTOTUNE = tf.data.AUTOTUNE

train_ds = train_ds.cache().prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

num_classes = 5

model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(num_classes)
])

model.compile(
optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

model.fit(
train_ds,
validation_data=val_ds,
epochs=14
)

model.save('flower_classifier_model.keras')

with open('class_names.pkl', 'wb') as f:
pickle.dump(class_names, f)

predicting_script.py
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import pickle
from PIL import Image
import pathlib

def predict_flower(image_path, model, class_names, img_height=180, img_width=180):
"""
Функция для предсказания класса цветка на изображении

Параметры:
- image_path: путь к изображению
- model: загруженная модель
- class_names: список названий классов
- img_height, img_width: размер, к которому нужно привести изображение

Возвращает:
- predicted_class: предсказанный класс
- confidence: уверенность модели в процентах
- all_probabilities: вероятности для всех классов
"""
img = Image.open(image_path)

img = img.resize((img_width, img_height))

img_array = np.array(img) / 255.0

img_array = np.expand_dims(img_array, axis=0) # форма становится (1, 180, 180, 3)

predictions = model.predict(img_array, verbose=0)

probabilities = tf.nn.softmax(predictions[0]).numpy()

predicted_index = np.argmax(probabilities)
predicted_class = class_names[predicted_index]
confidence = probabilities[predicted_index] * 100

return predicted_class, confidence, probabilities

with open('class_names.pkl', 'rb') as f:
class_names = pickle.load(f)

loaded_model = tf.keras.models.load_model('flower_classifier_model.keras')

from os import listdir
from os.path import isfile, join
files = [f for f in listdir("C:/Users/Admin/Documents/Projects/KerasCV_try_1/daisy") if isfile(join("C:/Users/Admin/Documents/Projects/KerasCV_try_1/daisy", f))]

for file in files:
print(predict_flower(f"daisy/{file}", loaded_model, class_names))

Это для моды
fashion.py
import tensorflow as tf
import numpy as np
import pickle

fashion_mnist = tf.keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

train_images = train_images / 255.0

test_images = test_images / 255.0

model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10)
])

model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=10)

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)

print('\nTest accuracy:', test_acc)

model.save('clothes_classifier_model.keras')

with open('class_names.pkl', 'wb') as f:
pickle.dump(class_names, f)

test_fashion.py
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import pickle
from PIL import Image
import pathlib

def predict_cloths(image_path, model, class_names, img_height=28, img_width=28):
img = Image.open(image_path)

if img.mode == 'RGB':
img = img.convert('L')

img = img.resize((img_height, img_width))
img_array = np.array(img) / 255.0

img_array = np.expand_dims(img_array, axis=0)

predictions = model.predict(img_array, verbose=0)

probabilities = tf.nn.softmax(predictions[0]).numpy()

predicted_index = np.argmax(probabilities)
predicted_class = class_names[predicted_index]
confidence = probabilities[predicted_index] * 100

return predicted_class, confidence, probabilities

with open('class_names.pkl', 'rb') as f:
class_names = pickle.load(f)

loaded_model = tf.keras.models.load_model('clothes_classifier_model.keras')

print(predict_cloths("test_image.jpg", loaded_model, class_names))


Подробнее здесь: https://stackoverflow.com/questions/798 ... ly-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»