0%

Tensorflow2 笔记1

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
# 创建一个回调,每 5 个 epochs 保存模型的权重
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))

数据预处理