InvalidArgumentError: несоответствие формы во время вычисления операций - PullRequest
0 голосов
/ 26 ноября 2018

Я создаю API-интерфейс Custome Estimator для данных временного ряда.При построении графа TensorFlow ошибки не возникает, но я получаю ошибку формы несоответствия во время вычисления графа.Перед публикацией кода позвольте мне объяснить немного о наборе данных, который я использовал.Данные, которые я использую для создания пользовательского оценщика: Данные временного ряда , которые имеют двухлетнюю историю.

Форма набора данных: (13, 731)

Моя цель - предсказать следующие 30 дней трафика магазина.

Я решил использовать Сверточная нейронная сеть для высокомерного прогнозирования временных рядов. Я взял 701 пункт данных для обучения и следующие 30 его соответствующих точек данных метки.Я написал следующее csv_input_fn для передачи входных данных в Estimator.

def csv_input_fn(csv_path, batch_size):
    #input function
    def _input_fn():
        input_filename= tf.train.match_filenames_once(csv_path)

        filename_queue= tf.train.string_input_producer(
            input_filename, num_epochs=None, shuffle=True)

        reader = tf.TextLineReader()
        _, value =  reader.read_up_to(filename_queue, num_records= batch_size)
        value_column = tf.expand_dims(value, -1)

        all_data= tf.decode_csv(value_column, record_defaults=CSV_TYPES)
        inputs= all_data[:len(all_data) - pred_steps]
        labels= all_data[len(all_data) - pred_steps: ]

        inputs= tf.concat(inputs, axis=1)
        labels= tf.concat(labels, axis=1)

        return{'raw_data': inputs}, labels


    return _input_fn

, где pred_steps=30, поскольку я должен предсказать трафик за последние 30 дней.Я создал свою собственную модель NN, в которой есть 8 слоев слоев с степенями расширения , затем плотный , затем выпадение , а затем еще один плотный слой и, наконец, последний слой.Это cnn_model_fn , которое я создал

def cnn_model_fn(features, labels, mode):

    #setup  the mode
    if mode == tf.estimator.ModeKeys.PREDICT:
        tf.logging.info("My Model Function: PREDICT, {}".format(mode))
    elif mode == tf.estimator.ModeKeys.EVAL:
        tf.logging.info("My Model Function: EVAL, {}".format(mode))
    elif mode ==  tf.estimator.ModeKeys.TRAIN:
        tf.logging.info("My Model Function: TRAIN, {}".format(mode))


    #set up the initializer
    #Input layer

    input_layer = tf.reshape(features['raw_data'], [-1, total_len_inp_features,1])

    #conv1 layer
    conv1 = tf.layers.conv1d(input_layer, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[0])

    #conv2 layer
    conv2 = tf.layers.conv1d(conv1, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[1])

    #conv3 layer
    conv3 = tf.layers.conv1d(conv2, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[2])

    #conv4 layer
    conv4 = tf.layers.conv1d(conv3, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[3])

    #conv5 layer
    conv5 = tf.layers.conv1d(conv4, filters=n_filters,
        kernel_size= filter_width,
        padding= 'same',
        dilation_rate= dilation_rates[4])

    #conv6 layer
    conv6 = tf.layers.conv1d(conv5, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[5])

    #conv7 layer
    conv7 = tf.layers.conv1d(conv6, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[6])

    #conv8 layer
    conv8 = tf.layers.conv1d(conv7, filters=n_filters,
        kernel_size= filter_width,
        padding='same',
        dilation_rate= dilation_rates[7])

    #add dense layer
    dense_1 = tf.layers.dense(conv8, units=128,
        activation= tf.nn.relu)

    #add dropout
    dropout= tf.layers.dropout(dense_1, rate=0.4)

    #add dense layer
    dense_2 = tf.layers.dense(dropout, units=1)

    #output layer
    outlen= tf.reshape(dense_2, [-1, len(OUTPUT_COLUMN_NAMES)])

    #predictions
    predictions= tf.layers.dense(outlen, 30, activation= None)

во время работы модели, я не сталкиваюсь с ошибкой при построении графика, но сталкиваюсь со следующей ошибкой при вычислении графика.

InvalidArgumentError (см. Выше для отслеживания): вход для изменения формы является тензор со значениями 9113, но запрашиваемая форма требует кратного 30 [[Node: Reshape_1 = Reshape [T = DT_FLOAT, Tshape = DT_INT32, _device= "/ job: localhost / replica: 0 / task: 0 / device: GPU: 0"] (плотность_1 / BiasAdd, Reshape_1 / shape)]] [[Узел: mean_squared_error / value / _227 = _Recvclient_terminated = false, recv_device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0 ", send_device =" / job: localhost / replica: 0 / task: 0 / device: GPU: 0 ", send_device_incarnation = 1, tenor_name ="edge_1825_mean_squared_error / value ", tennors_type = DT_FLOAT, _device =" / job: localhost / replica: 0 / task: 0 / device: CPU: 0 "]]

при устранении этой проблемы я ссылался по ссылке Недопустимая ошибка аргумента.Несовпадение формы при расчете градиентов .Я уверен, что моя программа выдает ошибку только из-за Shape Mismatch. Поскольку я новичок в построении пользовательских оценщиков, у меня возникают проблемы с определением точных решений.

Для справки,Я прилагаю ссылку Полный код

...