Keras model.fit() занимает много времени и не показывает индикатор выполнения

#python-3.x #performance #tensorflow #keras #model-fitting

Вопрос:

Я работаю над проблемой рукописных цифр. Надеюсь, мой код достаточно понятен для самого себя.

 import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.utils import to_categorical
import matplotlib.pyplot as plt
import csv
import numpy as np



with open('train.csv') as f:
    reader = csv.reader(f)
    contents = list(reader)



labels = np.array(contents[0][1:])
labels = np.reshape(labels, (28,28,1))


numbers = []
shape = np.shape(contents)
num_inputs = shape[1]
num_samples = shape[0]
for i in np.arange(1,num_samples):
    pixels = contents[i][1:]
    pixels = np.array(pixels, dtype = int)
    pixels = np.reshape(pixels, (28,28,1))
    #pixels = to_categorical(pixels)
    pixels = pixels / 255
    numbers.append(pixels)

num_hidden_layer = round(2/3 * num_inputs   10)



model = tf.keras.models.Sequential([
    tf.keras.layers.MaxPooling2D(pool_size=(4,4), input_shape=(28,28,1)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(num_hidden_layer, activation = 'relu'),
    tf.keras.layers.Dense(10, activation = 'softmax')
])


model.summary()



model.compile(optimizer = 'adam',
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])


model.fit(numbers, labels, epochs=3, verbose = 1)
 

Форма numbers есть (42000, 28, 28, 1) , и форма labels есть (42000, 28, 28, 1) . Сглаженные входные размеры от my model.summary составляют всего 49, с общим количеством 31 990 и обучаемыми параметрами. Несмотря на это, мой model.fit() просто бежит вечно, не показывая абсолютно ничего. Я даже попробовал использовать maxpool дальше, и ничего. Почему он ничего не делает? У меня есть verbose = 1 , и мне еще предстоит увидеть индикатор прогресса. Как я могу запустить это?

Обновить:

Я просто позволил этому течь, и в конце концов это прекратилось с: ValueError: Layer sequential_1 expects 1 input(s), but it received 42000 input tensors.

Ответ №1:

Я почти уверен, что это не работает, потому что ваши значения меток несовместимы с определением вашей модели. Что у тебя на этикетках? 28×28 для меток модели кажется неправильным. Вы используете sparse_categorical_crossentropy, который ожидает одно целое число для одного примера. Это единственное целое число будет указывать на правильную метку в вашем выводе softmax.

Комментарии:

1. Мои ярлыки-это просто строки. До того, как я сделал их 28×28 (по-видимому,глупо), они были просто списком, таким как [pixel1, pixel2, pixel3,…]

2. @genjong Я думаю, что у вас должна быть одна метка на изображение, как у Шейна Уокера, а не одна метка на пиксель.

Ответ №2:

Метки должны иметь только одно измерение, верно? Должен быть массив целых чисел.