预测函数期间tensorflow 出现问题,该错误预期为min_ndim=2,实际为ndim=1,收到完整形状:(无,)

xvw2m8pv  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(230)

我正在用这种形状的数据输入数据训练一个模型

input_data.shape
Out[51]: (3145, 11)

这个output_data

output_data.shape
Out[53]: (3145,)

然后我用这段代码创建一个拟合模型

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Input(shape=(11,)))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
model.fit(x = input_data, y = output_data, epochs=10, verbose=1)
model.save(tensor_model)

这和预期的一样,适合和运行。然而,当我试图用这个形状的数据做预测时

to_be_prdicted.shape
Out[57]: (11,)

使用此代码

output = model.predict(x=to_be_prdicted)

我得到这个错误

ValueError: Exception encountered when calling layer 'sequential_18' (type Sequential).
    
    Input 0 of layer "dense_17" is incompatible with the layer: expected min_ndim=2, found ndim=1. Full shape received: (None,)
    
    Call arguments received by layer 'sequential_18' (type Sequential):
      • inputs=tf.Tensor(shape=(None,), dtype=float32)
      • training=False
      • mask=None

它出错并给予我一个值错误消息,内容是“min_ndim=2,found ndim=1 Full shape received:(无)"。
这里也是我的模型的总结,如果它有帮助的话

model.summary()
Model: "sequential_18"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_17 (Dense)            (None, 1)                 12        
                                                                 
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
_________________________________________________________________

我已经尝试将输入添加到模型中

model.add(tf.keras.layers.Input(shape=(11,)))

正如你可以看到上面,但代码错误的方式与相同的错误

vcudknz3

vcudknz31#

为了避免这个错误,您需要提供与用于定义和训练模型的input_data.shape维度相同的预测数据集的形状维度(to_be_predicted)。
这里,input_data形状具有二维-(3145,11)
同样,to_be_predicted.shape应该在相同的维度上。

例如:

to_be_predicted = np.random.random((23, 11)).astype(np.float32) 
to_be_predicted.shape

输出:

(23, 11)

或者,您可以使用以下代码扩展to_be_predicted数据集维度以与input_shape匹配:

to_be_predicted = np.random.random((11)).astype(np.float32) 
to_be_predicted.shape # Output: (11,)

import numpy as np
to_be_predicted = np.expand_dims(to_be_prdicted, axis=0)
to_be_predicted.shape

输出:

(1, 11)

相关问题