Я начинаю изучать учебные пособия по машинному обучению с помощью 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
Учебные пособия по Tensorflow Keras CV работают неправильно ⇐ Python
Программы на Python
-
Anonymous
1772455620
Anonymous
Я начинаю изучать учебные пособия по машинному обучению с помощью Tensorflow Keras CV, и два моих учебных проекта работают неправильно.
Я использую эти учебные пособия:
https://www.tensorflow.org/tutorials/load_data/images
https://www.tensorflow.org/tutorials/keras/classification
И первый всегда говорит, что у меня есть одуванчик на картинке. Даже если это розы или тюльпаны.
Другой говорит, что у меня есть сумка. Даже если это брюки или футболка.
Проекты расположены в разных каталогах.
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))
Подробнее здесь: [url]https://stackoverflow.com/questions/79898570/tensorflow-keras-cv-tutorials-incorrectly-working[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия