修改 Sequential 模型的多类预测数组以匹配 KerasClassifier
Modify multiclass predictions array of Sequential model to match KerasClassifier
我知道使用
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)
然后预测有不同的形式,我不能将它用作计算的参数。
还有另一种方法可以计算精度和其他指标吗?
我需要转换预测吗?
您的 Sequential
模型的输出将具有 (3,)
的形状,包含估计的 class 概率。接下来,您必须为每个预测获得预测的(最有可能的)class,即您必须采用 argmax
predictions = model.predict(x=tst_X, batch_size=50, verbose=1)
predictions = np.argmax(predictions, 1)
然后,您可以按原样使用其余代码。
否则,您也可以直接使用 Sequential
模型的 predict_classes
功能,基本上是做同样的事情:
predictions = model.predict_classes(x=tst_X, batch_size=50, verbose=1)
我知道使用
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)
然后预测有不同的形式,我不能将它用作计算的参数。 还有另一种方法可以计算精度和其他指标吗? 我需要转换预测吗?
您的 Sequential
模型的输出将具有 (3,)
的形状,包含估计的 class 概率。接下来,您必须为每个预测获得预测的(最有可能的)class,即您必须采用 argmax
predictions = model.predict(x=tst_X, batch_size=50, verbose=1)
predictions = np.argmax(predictions, 1)
然后,您可以按原样使用其余代码。
否则,您也可以直接使用 Sequential
模型的 predict_classes
功能,基本上是做同样的事情:
predictions = model.predict_classes(x=tst_X, batch_size=50, verbose=1)