my neural network is not trained and stands at 0
code:
import os
import numpy as np
from PIL import Image
from tqdm import tqdm
from keras.models import Sequential, save_model, load_model
from keras.layers import Dense, Flatten
from keras.optimizers import Adam
from keras.utils import to_categorical
import pickle
def load_dataset(data_dir, max_images=None):
images =
labels =
total_images = len(os.listdir(data_dir))
if max_images is None:
max_images = total_images
for filename in tqdm(os.listdir(data_dir)[:max_images], desc="Загрузка изображений", ncols=100):
if len(images) >= max_images:
break
filepath = os.path.join(data_dir, filename)
label = filename.split(".")[0] # Извлекаем метку из имени файла
labels.append(label)
image = Image.open(filepath).convert("L") # Открываем изображение в оттенках серого
image = np.array(image) # Преобразуем изображение в массив NumPy
image = image.flatten() # Преобразуем массив изображения в одномерный вектор
images.append(image)
# Преобразуем списки изображений и меток в массивы NumPy
x_train = np.array(images, dtype="float32") / 255.0
y_train = np.array(labels)
unique_labels = np.unique(labels)
label_mapping = {label: i for i, label in enumerate(unique_labels)}
y_train_numeric = np.array([label_mapping[label] for label in labels])
y_train_onehot = to_categorical(y_train_numeric)
return x_train, y_train_onehot, unique_labels
def main():
# Загрузка данных
data_dir = input("Введите путь к папке с изображениями: ")
max_images = 10000
images, y_train_onehot, unique_labels = load_dataset(data_dir, max_images)
# Инициализация нейронной сети
model = Sequential()
model.add(Flatten(input_shape=(130 * 50,)))
model.add(Dense(128, activation='relu'))
model.add(Dense(len(unique_labels), activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.001), metrics=['accuracy'])
epochs = 3
for epoch in range(epochs):
print(f"Epoch №{epoch}")
history = model.fit(images, y_train_onehot, batch_size=32, epochs=1, verbose=1)
loss = history.history['loss'][0]
accuracy = history.history['accuracy'][0] * 100
print(f"Loss: {loss:.3f}")
print(f"Accuracy: {accuracy:.3f}%")
# Сохранение модели в новом формате Keras
save_model(model, "captcha_model.keras")
print("Модель сохранена как 'captcha_model.keras'")
# Сохранение меток классов
with open('unique_labels.pkl', 'wb') as f:
pickle.dump(unique_labels, f)
# Загрузка модели
model = load_model("captcha_model.keras")
# Загрузка меток классов
with open('unique_labels.pkl', 'rb') as f:
unique_labels = pickle.load(f)
# Вывод текста с изображения
test_image_path = input("Введите путь к тестовому изображению: ")
test_image = Image.open(test_image_path).convert("L")
test_image = test_image.resize((130, 50))
test_image = np.array(test_image)
test_image = test_image.flatten()
predicted_label_index = np.argmax(model.predict(np.array([test_image])))
predicted_label = unique_labels[predicted_label_index]
print(f"Предсказанный текст с изображения: {predicted_label}")
if name == “main”:
main()