«ValueError: неверное расширение пути к файлу для сохранения» при сохранении модели CNNPython

Программы на Python
Anonymous
«ValueError: неверное расширение пути к файлу для сохранения» при сохранении модели CNN

Сообщение Anonymous »

Я постоянно работал над изучением того, как использовать классификацию изображений для имеющейся у меня программы Python, и использовал существующую программу из Интернета, где она использует cifar10:

Код: Выделить всё

local_dataset_path = 'cifar-10-python.tar.gz'
extracted_path = 'cifar-10-batches-py'

# Extract the .tar.gz file
with tarfile.open(local_dataset_path, 'r:gz') as file:
file.extractall()  # Extracts into the current directory

# Function to load data from a batch file
def load_batch(batch_path):
with open(batch_path, 'rb') as file:
batch = pickle.load(file, encoding='latin1')
images = batch['data']
labels = batch['labels']
# Reshape and normalize the images
images = images.reshape((len(images), 3, 32, 32)).transpose(0, 2, 3, 1) / 255.0
labels = np.array(labels)
return images, labels

# Load all training batches
training_images = []
training_labels = []

for i in range(1, 6):
batch_path = os.path.join(extracted_path, f'data_batch_{i}')
images, labels = load_batch(batch_path)
training_images.append(images)
training_labels.append(labels)

# Concatenate all training images and labels
training_images = np.concatenate(training_images)
training_labels = np.concatenate(training_labels)

# Load the test batch
test_batch_path = os.path.join(extracted_path, 'test_batch')
testing_images, testing_labels = load_batch(test_batch_path)

# Class names for the CIFAR-10 dataset
class_names = ['Plane', 'Car', 'Bird', 'Cat', 'Deer', 'Dog', 'Frog', 'Horse', 'Ship', 'Truck']

# Plot the first 16 images
import matplotlib.pyplot as plt

for image in range(16):
plt.subplot(4, 4, image + 1)
plt.xticks([])
plt.yticks([])
plt.imshow(training_images[image])
plt.xlabel(class_names[training_labels[image]])

# plt.show()
training_images = training_images[:2000]
training_labels = training_labels[:2000]
testing_images = testing_images[:4000]
testing_labels = testing_labels[:4000]

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation = 'softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
model.fit(training_images, training_labels, epochs=10,  validation_data=(testing_images, testing_labels))

loss, accuracy = model.evaluate(testing_images, testing_labels)
print(f"Loss: {loss}")
print(f"Accuracy: {accuracy}")
model.save('image_classifier.model')
Я не уверен, следует ли именно так извлекать и загружать файл gz, поэтому, если у кого-то есть какие-либо комментарии по этому поводу, дайте мне знать. На данный момент основная проблема, с которой я столкнулся, заключалась в следующем:

Код: Выделить всё

ValueError: Invalid filepath extension for saving. Please add either a `.keras` extension
for the native Keras format (recommended) or a `.h5` extension. Use `model.export(filepath)`
if you want to export a SavedModel for use with TFLite/TFServing/etc.
Received: filepath=image_classifier.model.
Из видеоинструкции, которую я смотрел, код, который я тестировал, раньше нормально работал с image_classifier.model, но теперь мне нужно использовать keras или h5? Это из-за версии тензорного потока? Какой из них мне следует использовать? Установленный мною тензорный поток имеет версию 2.17, версию keras — 3.5, а мой редактор — VS Code. Моя версия Python — 3.11.8.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -cnn-model

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