keras是什么

​ Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow,CNTK或者Theano作为后端运行。

keras使用

定义模型

neural network是什么样的,需要在keras首先定义model是sequential

1
model = sequential()

设置隐藏层hidden layer,以及激活函数activation,这里假设使用sigmoid当作激活函数

1
model.add(activation('sigmoid'))

模型评估

评估模型的好坏

compile编译

1
model.compile()

定义一个loss

1
loss = ('cateqorical crossentropy')	#损失函数
1
2
optimizer #优化器
metrics #指标

最佳模型

Configuration

1
model.compile = (loss = 'categorical crossentropy', optimizer = 'adam')

optimizer后面可以跟不同的方式,都是梯度下降,只是学习率不同

寻找最优网络参数

  • 给定四个输入, x_train, y_train, batch_size, nb_epoch
  • 训练数据就是一张一张的图片, 每张图片对应的标签就是数字
  • Two dimension matrix(X_train),第一个dimension代表你有多少个example,第二个dimension代表你有多少个pixel
  • Two dimension matrix(y_train),第一个dimension代表你有多少个training example,第二个dimension代表label(黑色的为数字,从0开始计数)
1
model.fit(x_train, y_train, batch_size =100, nb_epoch = 20)

batch_size表示一个batch有多大(这里是将100个example放到一个batch中),nb_epoch等于20表示对每个batch重复20次

Keras、Tensorflow实战

数据集采用fashion_mnist数据集,不同于MNIST手写数据集,Fashion-MNIST数据集包含了10个类别的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。

导入库

1
2
3
4
5
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

下载fashion_mnist数据

1
2
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels),(test_images, test_labels) = fashion_mnist.load_data()

构建网络

1
2
3
4
5
6
7
8
9
10
11
train_labels_onehot = tf.keras.utils.to_categorical(train_labels)    # 独热编码
test_labels_onehot = tf.keras.utils.to_categorical(test_labels)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28,28))) #28*28
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10,activation='softmax'))

添加Dropout层可以抑制过拟合,但抑制过拟合最好的方法是:1.增加训练数据 2.减少网络容量

输出各层情况

1
model.summary()

https://s2.loli.net/2022/10/17/XsoS9ucztWC1eVq.png

配置训练方法时使用的优化器、损失函数以及评测标准

1
2
3
4
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss='categorical_crossentropy', # 独热编码时使用categorical_crossentropy
metrics=['acc']
)

训练模型

1
2
history = model.fit(train_images,train_labels_onehot,epochs=10,
validation_data=(test_images,test_labels_onehot))

https://s2.loli.net/2022/10/17/Gp57iJXblqYfenD.png

作图

1
2
history = model.fit(train_images,train_labels_onehot,epochs=10,
validation_data=(test_images,test_labels_onehot))

https://s2.loli.net/2022/10/17/tYhRMmIgjAp8E3H.png

1
2
3
plt.plot(history.epoch,history.history.get('acc'),label='acc')
plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')
plt.legend()

https://s2.loli.net/2022/10/17/iECjrBFJdnP8fqL.png