#coding=utf8
import numpy as np
# 有点像torch里面的sequential,构建模型的
from keras.models import Sequential
# 模型中的层
from keras.layers import Dense, Activation
# 优化器
from keras.optimizers import SGD
def main():
from sklearn.datasets import load_iris
iris = load_iris()
# 对于分类是需要将标签变成one-hot编码
print(iris['target'])
# 标签化操作,适合于分类任务
from sklearn.preprocessing import LabelBinarizer
print(LabelBinarizer().fit_transform(iris['target']))
# sklearn数据集分割
from sklearn.cross_validation import train_test_split
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2)
# 执行one-hot的转换
labels_train = LabelBinarizer().fit_transform(train_target)
label_test = LabelBinarizer().fit_transform(test_target)
# 定义模型
model = Sequential(
[
Dense(5, input_dim=4),
Activation('relu'),
# 输出3个神经元
Dense(3),
Activation("sigmoid"),
]
)
# 或者这样定义也可以的
model = Sequential()
model.add(Dense(5, input_dim=4))
(.....)
sgd = SGD(lr=0.01, decay=1e-6,momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss="catagorical_crossentropy")
# 训练
model.fit(train_data, labels_train, nb_epoch=200,batch_size=40)
# 根据测试数据测试输出结果
print(model.predict_classes(test_data))
# 肯定也有计算准确率的结果
"""
计算类的准确率、召回率、f1指数、support等
"""
from sklearn.metrics import classification_report # 将评价指标生成报表的形式
import numpy as np
y_pred = model.predict_classes(test_data)
# 将one-hot编码变成具体的类标---000-0 001-1 ....得到的是最大索引即类标
label_test = np.argmax(label_test, axis=1)
# 打印评价指标的报表。。。类别索引、准确率、召回率、f1指数、support(相当于置信度的东西)
print(classification_report(label_test, y_pred))
# 模型保存,保存.h5文件
model.save_weights("./xx.h5")
# 模型加载, 加载.h5文件
model.load_weights("./xx.h5")
简单的一个流程--------欢迎批评