简单的Keras模型形状问题

时间:2019-03-05 01:17:01

标签: python tensorflow keras

开始学习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,)

2 个答案:

答案 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,))