Python 修改序列模型的多类预测数组以匹配KerasClassifier

Python 修改序列模型的多类预测数组以匹配KerasClassifier,python,keras,metrics,multiclass-classification,Python,Keras,Metrics,Multiclass Classification,我理解使用 dataframe = pandas.read_csv("IrisDataset.csv", header=None) dataset = dataframe.values X = dataset[:,0:4].astype(float) Y = dataset[:,4] # encode class values as integers encoder = LabelEncoder() encoder.fit(Y) encoded_Y = encoder.transform(Y

我理解使用

dataframe = pandas.read_csv("IrisDataset.csv", header=None)
dataset = dataframe.values 
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]

# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)

def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(8, input_dim=4, activation='relu'))
    model.add(Dense(3, activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam',  metrics=['accuracy'])
  return model
estimator = KerasClassifier(build_fn=baseline_model, epochs=50, batch_size=5, verbose=0)    

estimator.fit(X, dummy_y)
predictions=estimator.predict(X)
要创建预测,可以通过以下方式计算指标:

print "PRECISION\t", precision_score(Y,encoder.inverse_transform(predictions), average=None)
其中Y是训练集的标签。但是如果我用这个来代替估计器:

model = Sequential()
model.add(Dense(8, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam',  metrics=['accuracy']
model.fit(X, dummy_y,epochs=50,batch_size=5,  shuffle=True, verbose=1)
predictions=model.predict(x=tst_X,batch_size=50,verbose=1) 
然后预测有不同的形式,我不能用它作为计算的参数。 有没有其他方法来计算精度和其他指标?
我需要转换预测吗?

您的
顺序
模型的输出将具有形状
(3,)
,包含估计的类别概率。接下来,您必须获得每个预测的预测(最有可能)类,即您必须使用
argmax

predictions = model.predict(x=tst_X, batch_size=50, verbose=1)
predictions = np.argmax(predictions, 1)
然后,您可以按原样使用代码的其余部分

否则,您也可以直接使用
Sequential
模型的
predict\u classes
函数,这基本上是做同样的事情:

predictions = model.predict_classes(x=tst_X, batch_size=50, verbose=1)
predict_classes()确实有帮助。我尝试了两种方法,但argmax()实际上不起作用。它返回了一个满是零的数组