Ошибка типа, когда model.fit выполняется в Tensorflow - PullRequest
0 голосов
/ 02 марта 2020

Я изучаю тензор потока и возникает ошибка ниже.

версия keras - 2.2.4-tf, Python - 3.7.4

И ОС - окно 10.

Я сделал модель тензорного потока, и во время обучения модели произошла ошибка.

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras import datasets
(train_x, train_y), (test_x, test_y) = datasets.mnist.load_data()

inputs = layers.Input((28, 28, 1))
net = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)
net = layers.Activation('relu')(net)
net = layers.Conv2D(32, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)

net = layers.Flatten()(net)
net = layers.Dense(512)(net)
net = layers.Activation('relu')(net)
net = layers.Dropout(0.5)(net)
net = layers.Dense(10)(net)  # num_classes
net = layers.Activation('softmax')(net)

model = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')


model.compile(optimizer=tf.keras.optimizers.Adam(), 
              loss='sparse_categorical_crossentropy', 
              metrics=[tf.keras.metrics.Accuracy()])

train_x = train_x[..., tf.newaxis]
test_x = test_x[..., tf.newaxis]

num_epochs = 1
batch_size = 32

model.fit(train_x, train_y, 
          batch_size=batch_size, 
          shuffle=True, 
          epochs=num_epochs) 

ниже приведена ошибка при запуске model.fit.

Кажется, что обучение не может быть выполнено полностью.

Что не так с кодом выше?

Train on 60000 samples
   32/60000 [..............................] - ETA: 11s
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-fea17f92bc8b> in <module>
      2           batch_size=batch_size,
      3           shuffle=True,
----> 4           epochs=1) 

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py in 
fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, 
class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, 
max_queue_size, workers, use_multiprocessing, **kwargs)
    817         max_queue_size=max_queue_size,
    818         workers=workers,
--> 819         use_multiprocessing=use_multiprocessing)
    820 
    821   def evaluate(self,

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in 
fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, 
shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, 
validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    340                 mode=ModeKeys.TRAIN,
    341                 training_context=training_context,
--> 342                 total_epochs=epochs)
    343             cbks.make_logs(model, epoch_logs, training_result, ModeKeys.TRAIN)
    344


TypeError: 'NoneType' object is not callable

1 Ответ

1 голос
/ 02 марта 2020

Я полагаю, что вы запутались, изменяя форму ваших примеров ввода.

Попробуйте сделать что-то вроде следующего кода:

Ваша модель:

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras import datasets
(train_x, train_y), (test_x, test_y) = datasets.mnist.load_data()

inputs = layers.Input((28, 28, 1))
net = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)
net = layers.Activation('relu')(net)
net = layers.Conv2D(32, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)

net = layers.Flatten()(net)
net = layers.Dense(512)(net)
net = layers.Activation('relu')(net)
net = layers.Dropout(0.5)(net)
net = layers.Dense(10)(net)  # num_classes
net = layers.Activation('softmax')(net)

model = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')


model.compile(optimizer=tf.keras.optimizers.Adam(), 
              loss='sparse_categorical_crossentropy', 
              metrics=[tf.keras.metrics.Accuracy()])

Изменение формы ввода:

X = train_x.reshape([-1,28,28,1])#reshaping as per your model input dimensions

Также одно горячее кодирование вывода (если не выполнено):

Y= tf.keras.utils.to_categorical(train_y, 10)

Обучение вашей модели:

num_epochs = 1
batch_size = 32

model.fit(X, Y, 
          batch_size=batch_size, 
          shuffle=True, 
          epochs=num_epochs) 

Я считаю, что это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...