TensorFlow2.0搭建Keras神经网络

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。它可以是现有优化器的字符串标识符,如 rmspropadagrad,也可以是 Optimizer 类的实例。详见:optimizers。
  • 损失函数 loss,模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如 categorical_crossentropymse,也可以是一个目标函数。详见: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      
=================================================================

你可能感兴趣的:(TensorFlow2.0搭建Keras神经网络)