ValueError:无法使用99872个元素重塑张量以成形[1,125,1,8]

时间:2018-08-08 11:59:27

标签: python keras

我正在尝试制作样本大小为125 * 8的模型 我的输入形状是(12484,8),但是我给了我这个错误:

  

ValueError:无法重塑具有99872个元素的张量以进行塑形   [1,125,1,8](1000个元素)用于带输入的“ Reshape_9”(操作:“ Reshape”)   形状:[1,12484,1,8],[4],输入张量计算为部分   形状:输入1 = [1,125,1,8]。

model = Sequential()
model.add(Convolution2D(64, kernel_size=(5, 5), strides=(1,1),padding="same", data_format="channels_last",input_shape= (8,125,1)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
model.add(Convolution2D(64, (5, 5),padding="same", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
model.add(Flatten())
model.add(Dense(5, activation='softmax'))
model.compile(loss='mse',
              optimizer='adam',
              metrics=['accuracy'])
print(model.summary())


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_73 (Conv2D)           (None, 8, 125, 64)        1664      
_________________________________________________________________
max_pooling2d_23 (MaxPooling (None, 4, 63, 64)         0         
_________________________________________________________________
conv2d_74 (Conv2D)           (None, 4, 63, 64)         102464    
_________________________________________________________________
max_pooling2d_24 (MaxPooling (None, 2, 32, 64)         0         
_________________________________________________________________
flatten_5 (Flatten)          (None, 4096)              0         
_________________________________________________________________
dense_45 (Dense)             (None, 5)                 20485     
=================================================================
Total params: 124,613
Trainable params: 124,613
Non-trainable params: 0
_________________________________________________________________
None


x_train= tf.reshape(x_train,[1,125,1,8])


model.fit(x_train, y_train,
          epochs=150,
          batch_size= 125)
score = model.evaluate(x_test, y_test, batch_size=125, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

输出

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
   1588   try:
-> 1589     c_op = c_api.TF_FinishOperation(op_desc)
   1590   except errors.InvalidArgumentError as e:

InvalidArgumentError: Cannot reshape a tensor with 99872 elements to shape [1,125,1,8] (1000 elements) for 'Reshape_9' (op: 'Reshape') with input shapes: [1,12484,1,8], [4] and with input tensors computed as partial shapes: input[1] = [1,125,1,8].

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-89-4e8b18efb44b> in <module>()
      1 #x_train= tf.reshape(x_train,[-1,288, 512, 3])
      2 
----> 3 x_train= tf.reshape(x_train,[1,125,1,8])
      4 
      5 

~\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_array_ops.py in reshape(tensor, shape, name)
   7429   if _ctx is None or not _ctx._eager_context.is_eager:
   7430     _, _, _op = _op_def_lib._apply_op_helper(
-> 7431         "Reshape", tensor=tensor, shape=shape, name=name)
   7432     _result = _op.outputs[:]
   7433     _inputs_flat = _op.inputs

~\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
    785         op = g.create_op(op_type_name, inputs, output_types, name=scope,
    786                          input_types=input_types, attrs=attr_protos,
--> 787                          op_def=op_def)
    788       return output_structure, op_def.is_stateful, op
    789 

~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in create_op(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_shapes, compute_device)
   3412           input_types=input_types,
   3413           original_op=self._default_original_op,
-> 3414           op_def=op_def)
   3415 
   3416       # Note: shapes are lazily computed with the C API enabled.

~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in __init__(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)
   1754           op_def, inputs, node_def.attr)
   1755       self._c_op = _create_c_op(self._graph, node_def, grouped_inputs,
-> 1756                                 control_input_ops)
   1757     else:
   1758       self._c_op = None

~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in _create_c_op(graph, node_def, inputs, control_inputs)
   1590   except errors.InvalidArgumentError as e:
   1591     # Convert to ValueError for backwards compatibility.
-> 1592     raise ValueError(str(e))
   1593 
   1594   return c_op

ValueError: Cannot reshape a tensor with 99872 elements to shape [1,125,1,8] (1000 elements) for 'Reshape_9' (op: 'Reshape') with input shapes: [1,12484,1,8], [4] and with input tensors computed as partial shapes: input[1] = [1,125,1,8].

Data looks like this:

2 个答案:

答案 0 :(得分:1)

整形时,元素的总和必须始终相同。

您收到此错误,因为1 * 125 * 1 * 8!= 99872

您的输入形状定义为:input_shape =(8,125,1)

Convolution2D预期:(批,行,列,通道)

您的原始x_train形状为:[1,12484,1,8]

您需要验证通道,行和列,然后进行相应的调整。

答案 1 :(得分:1)

由于VegardKT的解释,预计会发生重塑错误。

据我了解,您想首先尝试使用125个示例而不是12484个示例数据对样本子集进行网络。然后,您无需重塑形状,但切片应能完成工作。

如果我对您的问题的理解是正确的,

1]注释掉reshape()这一行

2]具有适合x_train [125 ,:]和y_train [125 ,:]的模型(只需从训练数据和标签集中选择前125行和所有列即可。)

如果我对这里的内容有误解,请告诉我。

相关问题