Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Я делаю свёрточную нейросеть на python tensorflow и keras и у меня не получается сделать predict помогите

TheBIrd Ученик (168), на голосовании 11 месяцев назад
вот код проекта:
 from tensorflow.keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
from keras import backend as K
from tensorflow.keras.layers import BatchNormalization
from tensorflow import keras
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras.optimizers import SGD, Adam
from keras.callbacks import ModelCheckpoint
import os
from keras.datasets import mnist
import cv2


#константы или типа того

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

x_train = x_train / 255
x_test = x_test / 255

y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

x_train = np.expand_dims(x_train, axis=3)
x_test = np.expand_dims(x_test, axis=3)


#архитектрурищеееее

modl = keras.Sequential([Conv2D(32,(3, 3), padding="same", activation="relu",input_shape=(28,28,1)), MaxPooling2D((2,2),strides=2), Conv2D(64,(3, 3), padding="same", activation="relu"), MaxPooling2D((2,2),strides=2), Flatten(), Dense(128, activation = "relu"), Dense(10, activation = "softmax")])

modl.compile(optimizer = "adam", loss = "categorical_crossentropy", metrics = ["accuracy"])

lern = modl.fit(x_train, y_train, batch_size = 32, epochs = 1, validation_split=0.2)

#ура ура я наконец-то сделаю ввод ура ура ура

img = cv2.imread('/content/пятёрка.jpg',0)
img = img.astype(np.uint8)
img.reshape(28, 28 ,1)
img = img/255
predictions = modl.predict(img)
print(predictions)
(там одна эпоха потому что я не хочу ждать 2 часа пока пройдут 70)
и при запуске вот такая ошибка:

ValueError: in user code:

File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2440, in predict_function *
return step_function(self, iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2425, in step_function **
outputs = model.distribute_ strategy.run (run_step, args=(data,))
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2413, in run_step **
outputs = model.predict_step(data)
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2381, in predict_step
return self(x, training=False)
File "/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/input_spec.py", line 253, in assert_input_compatibility
raise ValueError(

ValueError: Exception encountered when calling layer 'sequential_7' (type Sequential).

Input 0 of layer "conv2d_14" is incompatible with the layer: expected min_ndim=4, found ndim=2. Full shape received: (None, 28)

Call arguments received by layer 'sequential_7' (type Sequential):
• inputs=tf.Tensor(shape=(None, 28), dtype=float32)
• training=False
• mask=None
вот скрин с ошибкой

помогите пожалуйста я не понимаю в чём ошибка на картинках из тестовой выборки всё работает
Голосование за лучший ответ
Chromatic Scale Искусственный Интеллект (244911) 12 месяцев назад
Ошибка, с которой вы столкнулись, указывает на то, что ваша картинка для предсказания имеет неправильное количество измерений. Модель ожидает входные данные с четырьмя измерениями: (количество образцов, высота, ширина, каналы), но получает изображение с двумя измерениями.

Проблема здесь в том, как вы обрабатываете изображение перед предсказанием. Вы загружаете изображение, изменяете его размер и делите на 255, но не добавляете измерение для пакета (batch dimension) и канала. Давайте исправим ваш код для предсказания:

```python
import cv2
import numpy as np

# Загрузка изображения
img = cv2.imread('/content/пятёрка.jpg', cv2.IMREAD_GRAYSCALE)

# Проверка, что изображение загружено
if img is None:
print("Ошибка загрузки изображения")
else:
# Изменение размера изображения и нормализация
img = cv2.resize(img, (28, 28))
img = img.astype(np.float32) / 255.0

# Добавление измерений для пакета и каналов
img = np.expand_dims(img, axis=0) # Добавление измерения пакета
img = np.expand_dims(img, axis=-1) # Добавление измерения канала

# Сделать предсказание
predictions = modl.predict(img)
print(predictions)
```

Этот исправленный код должен корректно подготавливать ваше изображение и передавать его в модель для предсказания. Теперь `img` будет иметь форму `(1, 28, 28, 1)`, что соответствует ожиданиям модели.
Похожие вопросы