Ошибка Tensorflowensorflow.python.framework.errors_impl.InvalidArgumentError: Несовместимый размер матрицы: в [0]: [32768,4], в [1]: [3,1] - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сделать распознавание пластин. Сверточная нейронная сеть, у меня есть CSV с filepath и пластинами, что-то вроде этого:

img_path,plate
path.png,P990124

Я преобразовываю пластину в массив 7x36, используя этоконвертер:

settings.CHARS = 'ABCDE...0123..89'

def get_letter_vector(char: str) -> list:
    if len(char) > 1:
        return None
    if char not in settings.CHARS:
        return None
    letter_vector = list(numpy.zeros(len(settings.CHARS), dtype=int))
    letter_vector[settings.CHARS.index(char)] = 1
    return letter_vector


def get_word_matrix(word: str):
    return [get_letter_vector(c) for c in word]

Например, для пластины «P990124» я бы получил 7x36, как это [[0,0,0,1,0,0], [0,1,0,0,0 ...] ...]

Я получаю сообщение об ошибке при попытке обучить CNN:

Epoch 1/5
WARNING:tensorflow:From C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\ops\math_grad.py:1394: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
WARNING:tensorflow:Entity <function Function._initialize_uninitialized_variables.<locals>.initialize_variables at 0x000001D3E05F1678> could not be transformed and will be executed as-is. Please report this to the AutoGraph team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output. Cause: module 'gast' has no attribute 'Num'
2019-09-20 16:10:50.904720: W tensorflow/core/common_runtime/base_collective_executor.cc:216] BaseCollectiveExecutor::StartAbort Invalid argument: {{function_node __inference_Dataset_map_read_image_98}} Matrix size-incompatible: In[0]: [32768,4], In[1]: [3,1]
     [[{{node rgb_to_grayscale/Tensordot/MatMul}}]]
     [[IteratorGetNext]]
      1/Unknown - 0s 471ms/step
      1/Unknown - 0s 472ms/stepTraceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files\JetBrains\PyCharm 2019.2.1\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2019.2.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/sclennin/PycharmProjects/sv-anpr-cnn/train.py", line 63, in <module>
    CNNMODEL.fit(dataset_train, epochs=5)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 728, in fit
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 324, in fit
    total_epochs=epochs)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 123, in run_one_epoch
    batch_outs = execution_function(iterator)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py", line 86, in execution_function
    distributed_function(input_fn))
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\def_function.py", line 457, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\def_function.py", line 520, in _call
    return self._stateless_fn(*args, **kwds)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\function.py", line 1823, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\function.py", line 1141, in _filtered_call
    self.captured_inputs)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\function.py", line 1224, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\function.py", line 511, in call
    ctx=ctx)
  File "C:\Users\sclennin\PycharmProjects\venvs\sv-anpr-cnn\lib\site-packages\tensorflow_core\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError:   Matrix size-incompatible: In[0]: [32768,4], In[1]: [3,1]
     [[{{node rgb_to_grayscale/Tensordot/MatMul}}]]
     [[IteratorGetNext]] [Op:__inference_distributed_function_827]
Function call stack:
distributed_function -> distributed_function

Я использую следующую модель:

settings.INPUT_SHAPE = (256, 128, 1)

model = tf.keras.models.Sequential([
    # Convolucional 5x5 x128 y64 z48
    layers.Conv2D(48, (5, 5), activation='relu', input_shape=settings.INPUT_SHAPE),
    # Maxpool 2x2 x64 y32 z48
    layers.MaxPooling2D((2, 2)),
    # Flatten model
    layers.Flatten(),
    # Fullyconnected 2048
    layers.Dense(2048, activation='relu'),
    layers.Reshape((settings.VALID_PLATE_SIZE - 1, len(settings.CHARS)))
])

И это подготовка, которую я делаю, когда пытаюсь обучить сеть

def read_image(filename, label):
    image_string = tf.io.read_file(filename)
    image_decoded = tf.image.decode_png(image_string)
    image_resized = tf.image.resize(image_decoded, (settings.INPUT_SHAPE[0], settings.INPUT_SHAPE[1]))
    image_reshaped = tf.image.rgb_to_grayscale(image_resized)
    # image_reshaped = tf.expand_dims(image_resized, axis=0)
    return image_reshaped, label


def prepare_dataset(csv: str) -> tuple:
    l = []
    with open(csv) as f:
        l += f.readlines()
    # ejemplo de linea D573_901.frontal_p398543.jpg.png
    return [os.path.join(settings.PLACAS_GENERADAS_TRANSFORMADAS_DIR, fn)[:-1] for fn in l],\
           [utils.get_word_matrix(fn[:8].replace('_', '')) for fn in l]


# train_images, train_labels = prepare_dataset(settings.TRAIN_CSV_DIR)
slices = prepare_dataset(settings.TRAIN_CSV_DIR)
dataset_train = tf.data.Dataset.from_tensor_slices(slices)
dataset_train = dataset_train.map(read_image).batch(settings.BATCH_SIZE)
print(dataset_train)


model.compile(
    optimizer=tf.keras.optimizers.Adam(),
    loss=tf.keras.losses.CategoricalCrossentropy(),
    metrics=['mae', 'mse', 'acc']
)

print('================ TRAINING ================') 
model.fit(dataset_train, epochs=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...