Keras 基础知识
keras 是在从机器学习中抽象出来的高级API,给不同的模型提供了方便快捷的接口,隐藏了模型的具体实现,可以快速的构建出想要的模型,适合刚入门机器学习并不需要太深度的要求的人群,其中主要的对象为Model,Model主要含有下面几个方法
- summary
给出模型的概况,包括层、层的参数个数、可训练的参数个数等
- compile
编译,给模型规定loss方法,梯度更新的方法,以及训练过程中输出的测度
- fit
用训练集训练模型,并返回一个History对象,History包含compile中的测度
- evaluate
用于评估测试集
更多Model的方法可用dir(keras.Model)
来查看
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| model = keras.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())])) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1))
optimizer = tf.keras.optimizers.RMSprop(0.001)
model.compile(loss='mse', optimizer=optimizer, metrics=['mae', 'mse'])
history = model.fit( normed_train_data, train_labels, epochs=EPOCHS, validation_split = 0.2, verbose=0, callbacks=[PrintDot()])
hist = pd.DataFrame(history.history) hist['epoch'] = history.epoch
|
Checkpoint
checkpoint 是通过在训练过程的回调函数来实现的,实现需要创建回调对象
1 2 3 4 5 6
| cp_callback = tf.keras.callbacks.ModelCheckpoint( filepath=checkpoint_path, verbose=1, save_weights_only=True, period=5)
|
然后再模型的训练过程中添加回调函数
1 2 3 4 5 6 7
| model.fit(train_images, train_labels, epochs=50, callbacks=[cp_callback], validation_data=(test_images,test_labels), verbose=0)
|
加载数据
通过path等加载数据构建一个Dataset对象,Dataset对象提供了在训练过程中需要的接口
读取数据
CSV
需要指定label和需要的特征
1 2 3 4 5 6 7 8
| dataset = tf.data.expeimental.make_csv_dataset( file_path, batch_size = 12, label_name = LABEL_COLUMN, na_value = "?", num_epoch = 1, ignore_errors = True )
|
numpy
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| with np.load(path) as data: train_examples = data['x_train'] train_labels = data['y_train'] test_examples = data['x_test'] test_labels = data['y_test']
train_dataset = tf.data.Dataset.from_tensor_slices((train_examples, train_labels)) test_dataset = tf.data.Dataset.from_tensor_slices((test_examples, test_labels))
BATCH_SIZE = 64 SHUFFLE_BUFFER_SIZE = 100 train_dataset = train_dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE) test_dataset = test_dataset.batch(BATCH_SIZE)
|
Pandas
1 2 3 4
| df = pd.read_csv(csv_file) target = df.pop('target')
dataset = tf.data.Dataset.from_tensor_slices((df.values, target.values))
|
数据预处理