Python 3.x Keras期望2d阵列和(1,)形状同时出现

Python 3.x Keras期望2d阵列和(1,)形状同时出现,python-3.x,numpy,machine-learning,keras,Python 3.x,Numpy,Machine Learning,Keras,我加载了一个keras模型 model = keras.models.load_model('myModel.h5') model.fit(x,y, batch_size=1, epochs=2) 在这里的最后一行,它显示了一个错误,它希望y是一个2D输入。我的y文件的样本是 [0,0,-1] 可以在2Ds内更改为[[0,0,-1]]或[[0]、[0]、-1]] 在第一种情况下, 错误:获取了具有shape3的数组,其中应为shape1, 在第二种情况下 错误:有3个示例,其中预期有1个 在本

我加载了一个keras模型

model = keras.models.load_model('myModel.h5')
model.fit(x,y, batch_size=1, epochs=2)
在这里的最后一行,它显示了一个错误,它希望y是一个2D输入。我的y文件的样本是 [0,0,-1] 可以在2Ds内更改为[[0,0,-1]]或[[0]、[0]、-1]] 在第一种情况下, 错误:获取了具有shape3的数组,其中应为shape1, 在第二种情况下 错误:有3个示例,其中预期有1个

在本培训部分之前,我运行model.predict,在此过程中,它给出格式为[[0.00251,-0.00526,0.005476]]的输出

我错过了什么

模型定义

inputs = Input(shape=(32,32,1))
denseModel = DenseNet121(include_top=False, weights=None, input_shape=(32,32,1), pooling='avg')(inputs)
denseModel = Dense(32, activation='relu')(denseModel)
denseModel = BatchNormalization()(denseModel)
denseModelPrediction = Dense(3, activation='tanh', name='predictions')(denseModel)

myModel = Model(inputs=inputs, outputs=denseModelPrediction)
myModel.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
myModel.save('myModel.h5')

仅仅在这里初始化它

你的损失函数稀疏\分类\交叉熵期望你的y值是一个热编码的。由于您有三个输出节点,因此丢失的是一个y值和一个3,形状,因此是您的第一个错误


如果你试图回归三个独立的概率,我建议你把损失换成比较数字的东西,例如loss='mse'均方误差。这将解决您的输入形状问题。您可能还想考虑将输出激活设置为SigMID,以强制它在0和1之间。

在您保存模型之前,我们能看到您的模型定义吗?@ JMNSUSAI我编辑了所需的模型。谢谢。这是分类网络吗?你给出的例子是[0,0,-1]。这与您试图从网络中获得的三个独立输出有关,还是这三个连续的样本有关?3个独立的输出。但我想让它们表明某种可能性。它们不是用来分类的,可以被看作是独立的。预测的概率介于-1和1之间,但真实样本是-1、0或1,所以这很奇怪-我甚至无法像您在最新版本的Keras上那样定义网络。DenseNet在抱怨你的尺寸太大了。杰姆萨萨。这个参数也可以反过来,比如在时间1,时间2和时间3向右移动的概率,所以如果我得到-1,它就会向左移动。这就是我为什么要把它晒黑的原因。