InvalidArgumentError:计算操作期间形状不匹配

时间:2018-11-26 07:52:13

标签: python-3.x tensorflow conv-neural-network tensorflow-estimator

我正在为时间序列数据创建Custome Estimator API。 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个带扩张率的conv1d层,然后是致密,然后是辍学,再是另一个致密层,最后一层。这是我创建的 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 /副本:0 / task:0 / device:GPU:0”]](dense_1 / BiasAdd,   Reshape_1 / shape)]]            [[节点:mean_squared_error / value / _227 = _Recvclient_terminated = false,recv_device =“ / job:localhost /副本:0 / task:0 / device:CPU:0”,   send_device =“ / job:localhost /副本:0 / task:0 / device:GPU:0”,   send_device_incarnation = 1,   tensor_name =“ edge_1825_mean_squared_error / value”,   tensor_type = DT_FLOAT,   _device =“ / job:localhost /副本:0 /任务:0 /设备:CPU:0”]]

在解决此问题时,我引用了链接Invalid Argument Error. Shape Mismatch while computing gradients。我确定,我的程序仅是由于形状不匹配而引发错误。由于我是新创建自定义估算器的人,因此在找出确切的解决方案时会遇到问题。

我附上链接Full code

供您参考。

0 个答案:

没有答案