这很可能之前已经回答过,但我对 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