keras 入门
keras 数据预处理
将数据变为one-hot编码
` from keras.utils.np_utils import to_categorical`
`y_train = to_categorical(y_train, num_classes=10)`
打乱数据
#打乱数据
index = [i for i in range(len(x))]
np.random.shuffle(index)
#x.shape=(150,4)
x = x[index]
#Y.shape=(150,)
Y = Y[index]
数据标准化
x -= x.mean(axis=0)
#将每个特征分别标准化,使其平均值为 0。
x /= x.std(axis=0)
#将每个特征分别标准化,使其标准差为 1
构建网络
from keras import models
from keras import layers
#模型定义
model=models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
#编译模型
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuray'])
训练模型
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(x, to_categorical(Y), epochs=20, batch_size=3, validation_split=0.2,shuffle=False,verbose=0)
激活函数以及损失函数的选择
选择指标metrics
accuracy 分类问题
mse 回归问题
mae 回归问题
预测结果
model.evaluate
# 评估模型,不输出预测结果
loss,accuracy = model.evaluate(X_test,Y_test) print('\ntest loss',loss) print('accuracy',accuracy)
model.predict()
#模型预测,输入测试集,输出预测结果
y_pred = model.predict(X_test)
one_hot编码处理后的预测类别
predict_test = model.predict(X_test)
predict = argmax(predict_test,axis=1)
#axis = 1是取行的最大值的索引,0是列的最大值的索引
model.predict_classes()
返回的是类别的索引,即该样本所属的类别标签。
#鸢尾花三分类
y_predict = model.predict_classes(x[:5])
print(y_predict)
y_predict.shape
out:
[1 0 1 1 2]
(5,)
防止过拟合
- 获取更多的训练数据
- 减小网络容量
- 添加权重正则化
向模型添加 L2 权重正则化
from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),
activation='relu', input_shape=(10000,)))
- dropout
model.add(layers.Dropout(0.5))