TensorFlow2.0搭建Keras神经网络
【曹健老师人工智能实践课笔记】
主要方法
model = tf.keras.models.Sequential
model.compile
model.fit
model.summary
【查阅Keras文档快速入门】
keras sequential
顺序模型是多个网络层的线性堆叠。
你可以通过将网络层实例的列表传递给 Sequential
的构造器,来创建一个 Sequential
模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
也可以简单地使用 .add()
方法将各层添加到模型中:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
【各种基本层实现可参阅文档】https://keras.io/zh/getting-started/sequential-model-guide/
Dense:全连接层
Conv2D:卷积层
LSTM
Flatten:Flatten层的实现在Keras.layers.core.Flatten()类中。
作用:https://blog.csdn.net/program_developer/article/details/80853425
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。【多维——一维数据】
keras compile
【这一部分也是看的文档】
在训练模型之前,您需要配置学习过程,这是通过 compile
方法完成的。它接收三个参数:
- 优化器 optimizer。它可以是现有优化器的字符串标识符,如
rmsprop
或adagrad
,也可以是 Optimizer 类的实例。详见:optimizers。 - 损失函数 loss,模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如
categorical_crossentropy
或mse
,也可以是一个目标函数。详见:losses。 - 评估标准 metrics。对于任何分类问题,你都希望将其设置为
metrics = ['accuracy']
。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。
# 多分类问题
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 二分类问题
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
# 均方误差回归问题
model.compile(optimizer='rmsprop',
loss='mse')
# 自定义评估标准函数
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
一个简单的网络
【参考老师的PPT】
#!/usr/bin/env python
# coding:utf-8
import tensorflow as tf
mnist = tf.keras.datasets.fashion_mnist
(x_train,y_train),(x_test,y_test)=mnist.load_data()
x_train,x_test=x_train/255.0,x_test/255.0
'''
像素范围要压缩到0~1之间,做如下处理,能保证训练的准确率:
train_images = train_images / 255.0 test_images = test_images / 255.0
'''
class MnistModel(tf.keras.Model):
def __init__(self):
super(MnistModel,self).__init__()
self.dl = tf.keras.layers.Flatten(input_shape=(28,28))
self.d2 = tf.keras.layers.Dense(512,activation='relu')
self.d3 = tf.keras.layers.Dense(256, activation='relu')
self.d4 = tf.keras.layers.Dense(128, activation='relu')
self.d5 = tf.keras.layers.Dense(10, activation='softmax')
def call(self,x):
a=self.dl(x)
b=self.d2(a)
c=self.d3(b)
d=self.d4(c)
e=self.d5(d)
return e
model=MnistModel()
model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])
model.fit(x_train,y_train,epochs=100,validation_data=(x_test,y_test),validation_freq=2)#似乎不用100次,10几次就能达到90%准确率了
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten_1 (Flatten) multiple 0
_________________________________________________________________
dense_4 (Dense) multiple 401920
_________________________________________________________________
dense_5 (Dense) multiple 131328
_________________________________________________________________
dense_6 (Dense) multiple 32896
_________________________________________________________________
dense_7 (Dense) multiple 1290
=================================================================