尺寸必须相等,但为 25 和 50。输入形状:[5,25]、[5,50]

时间:2021-05-28 00:06:09

标签: tensorflow

这很可能之前已经回答过,但我对 TF 还很陌生,我更需要解释而不是答案。我得到的错误是

ValueError: Dimensions must be equal, but are 25 and 50 for '{{node huber_loss/Sub}} = Sub[T=DT_FLOAT](huber_loss/remove_squeezable_dimensions/Squeeze, IteratorGetNext:1)' with input shapes: [5,25], [5,50].

来自此代码:

windowSize = 10
batches = 5

#get data from csv
csv = list(pd.read_csv('path\\to\\csv').pop('Amount'))

trainingData = []
trainingAnswers = []
validationData = []
validationAnswers = []

#generate `batches` batches
for batch in range(0,batches):
    
    trainingData.append([])
    trainingAnswers.append([])

    #generate 50 random timesteps
    for _ in range(50):
        windowStart = random.randint(0, len(csv)-windowSize-1)
        n = random.randint(0, len(csv)-1-(windowSize + windowStart))
        trainingDataPoint = csv[windowStart:windowStart+windowSize]
        trainingDataPoint.append(n)
        trainingData[batch].append(trainingDataPoint)
        
        trainingAnswers[batch].append(csv[windowStart+windowSize + n])



    validationData.append([])
    validationAnswers.append([])

    for _ in range(50):
        windowStart = random.randint(0, len(csv)-windowSize-1)
        n = random.randint(0, len(csv)-1-(windowSize + windowStart))
        validationDataPoint = csv[windowStart:windowStart+windowSize]
        validationDataPoint.append(n)
        validationData[batch].append(validationDataPoint)
        
        validationAnswers[batch].append(csv[windowStart+windowSize + n])

#all input data should now be 3D and ready to give to the model
#every array is of shape [batches, 50, 11]

model = keras.models.Sequential()
model.add(keras.layers.Dense(8))
model.add(keras.layers.Conv1D(filters=1,
                            kernel_size=2,
                            strides=1,
                            dilation_rate=1,
                            padding="causal",
                            activation="relu",
                            ))
model.add(keras.layers.Conv1D(filters=32,
                            kernel_size=2,
                            strides=2,
                            dilation_rate=2,
                            padding="causal",
                            activation="relu",
                            ))
model.add(keras.layers.Conv1D(filters=32,
                            kernel_size=2,
                            strides=1,
                            dilation_rate=4,
                            padding="causal",
                            activation="relu",
                            ))
model.add(keras.layers.Conv1D(filters=32,
                            kernel_size=2,
                            strides=1,
                            dilation_rate=8,
                            padding="causal",
                            activation="relu",
                            ))
model.add(keras.layers.Dense(8))
model.add(keras.layers.Dense(1))

callbacks = [
    tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10, verbose=0)
]

optimizer = keras.optimizers.Adam(lr=1e-4)
model.compile(loss=keras.losses.Huber(),
                optimizer=optimizer,
                metrics=["mae"])

model.fit(np.array(trainingData), np.array(trainingAnswers), batch_size=batches, epochs=100, validation_data=(np.array(validationData),np.array(validationAnswers)), callbacks=callbacks, shuffle=True)

我知道 5 是输入的批次数,我假设 50/25 是时间步数,但我不确定它从哪里得到 25

0 个答案:

没有答案