我正在尝试制作样本大小为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].
答案 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行和所有列即可。)
如果我对这里的内容有误解,请告诉我。