开始学习Keras和TensorFlow。为什么形状不对,我该如何解决?
(温度输入以预测电力负荷输出)
load = data.loc[:35063,'Load'].values
temp = data.loc[:35063,'Temperature'].values
load.shape
(35064,)
from keras.layers import Input,Dense
input_tensor = Input(shape=(35064,))
output_tensor = Dense(1)(input_tensor)
from keras.models import Model
model = Model(input_tensor,output_tensor)
model.compile(optimizer='adam',loss='mape')
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_13 (InputLayer) (None, 35064) 0
_________________________________________________________________
dense_6 (Dense) (None, 1) 35065
=================================================================
Total params: 35,065
Trainable params: 35,065
Non-trainable params: 0
_________________________________________________________________
model.fit(temp,load,verbose=True)
ValueError: Error when checking input: expected input_13 to have shape (35064,) but got array with shape (1,)
当我打印数组的形状时,它们都是(35064,)
。 Keras为什么认为输入数组是(1,)
?
答案 0 :(得分:0)
在该行中,
load.shape()
# Output is ( 35064 , )
数字35064显示load
数组中pf个样本的数量。子数组没有确定的形状,因此在35064之后有一个,
。Keras中的未知维被视为None。因此解决方法可能是
input_tensor = Input(shape=(None,))
# Should fix the problem!
“无”维可以处理任何其他维值。在Keras中,输入形状不得包含num_of_samples。
给出错误的模型的输入形状为(35064,35064)
固定错误将导致输入形状为(35064,None)。
答案 1 :(得分:0)
数组的第一个维度始终是样本维度,您不必在input_shape中放入该维度。您可以将数组的形状调整为(35064,1),这意味着您必须更改输入形状。
使用此:
load = load.reshape((35064, 1))
temp = temp.reshape((35064, 1))
input_tensor = Input(shape=(1,))