用 Keras 快速上手深度学习(带实际案例)

1. Keras 简介

Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,keras的基本特点:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
  • 支持CNN和RNN,或二者的结合
  • 无缝CPU和GPU切换

注意:Keras适用的Python版本是:Python 2.7-3.6

1.1 Keras的重要API

Keras的API主要可以分为以下几类:

layers

主要涉及神经网络的一些构件,如全连接,卷积,最大池化等。

## layers相关API
input_tensor = keras.layers.Input(shape=(784,)) # 实质上 shape = (None, 784)——默认 784 前面有一个batchsize 为 None

keras.layers.Dense(units=10,activation=keras.activations.relu,use_bias=True)

keras.layers.Softmax(axis=-1)(input_tensor)

keras.layers.Flatten()

a = keras.layers.Input(shape=(28,))
print(a)
b = keras.layers.Input(shape=(56,))
print(b)
c= keras.layers.concatenate([a,b],axis=-1)  # 对应最后一个维度,即 28 和 56
print(c)

activations

主要涉及神经网络的常用激活函数。

## activations相关API
keras.activations.relu
keras.activations.sigmoid
keras.activations.tanh

losses

主要涉及一些常用的损失函数。

## losses相关API
keras.losses.categorical_crossentropy
keras.losses.sparse_categorical_crossentropy
keras.losses.mean_squared_error
keras.losses.mean_absolute_error
keras.losses.logcosh()

metrics

主要涉及常用的模型评估方法。

## metric相关API
keras.metrics.accuracy
keras.metrics.sparse_top_k_categorical_accuracy
keras.metrics.Precision()
keras.metrics.Recall()

optimizers

主要涉及常用的优化方法。

## optimizers相关API
keras.optimizers.SGD()
keras.optimizers.RMSprop()
keras.optimizers.Adam()

models

主要涉及模型的组装,模型的保存,模型的加载。

(1)模型类型

Keras 有两种模型:Sequential API 和 Function API

  • Sequential API
# Sequential API
model = keras.models.Sequential([keras.layers.Dense(30, activation="relu",input_shape=[10]),keras.layers.Dense(1)])
print(model.input_shape)
model.compile(loss="mean_squared_error", optimizer="sgd")
  • Function API

在这里插入图片描述

#Function API
#单输入单输出
input_tensor = keras.layers.Input(shape=(12,))
hidden1 = keras.layers.Dense(30, activation="relu")(input_tensor)
hidden2 = keras.layers.Dense(30, activation="relu")(hidden1)
concat = keras.layers.Concatenate(axis=-1)([input_tensor, hidden2])
output_tensor = keras.layers.Dense(1)(concat)
keras.models.Model(inputs=[input_tensor],outputs=[output_tensor])

在这里插入图片描述

#多输入单输出
input_A = keras.layers.Input(shape=[5])
input_B = keras.layers.Input(shape=[6])
hidden1 = keras.layers.Dense(30, activation="relu")(input_B)
hidden2 = keras.layers.Dense(30, activation="relu")(hidden1)
concat = keras.layers.Concatenate(axis=-1)([input_A, hidden2])
output = keras.layers.Dense(1)(concat)
model = keras.models.Model(inputs=[input_A, input_B], outputs=[output])

在这里插入图片描述

#多输入多输出
input_A = keras.layers.Input(shape=[5])
input_B = keras.layers.Input(shape=[6])
hidden1 = keras.layers.Dense(30, activation="relu")(input_B)
hidden2 = keras.layers.Dense(30, activation="relu")(hidden1)
concat = keras.layers.concatenate([input_A, hidden2])
output = keras.layers.Dense(1)(concat)
aux_output = keras.layers.Dense(1)(hidden2)
model = keras.models.Model(inputs=[input_A, input_B],outputs=[output, aux_output])
model.compile(loss=["mse", "mae"], loss_weights=[0.9, 0.1], optimizer="sgd")

(2) 模型训练

model.fit([X_train_A, X_train_B], [y_train, y_train], epochs=20,batch_size=64,validation_data=([X_valid_A,X_valid_B],[y_valid, y_valid]))

(3)模型保存

## model系列API
keras.models.save_model
keras.models.load_model

backend

主要涉及更底层的一些操作,如张量的操作。

## backend系列API
keras.backend.argmax
keras.backend.sum

callbacks

主要涉及一些回调函数的操作。如模型的保存,模型的可视化。

callback 用在 model.fit() 中

## callback系列API
keras.callbacks.ModelCheckpoint()
keras.callbacks.TensorBoard()

1.2 网络建立过程

使用Keras建立神经网络主要包含三个步骤:

  • 准备数据。
  • 搭建神经网络结构。
  • 编译模型(确定损失函数、优化方法和回调函数)。
  • 训练模型。

2. 代码实例

下面将使用一个简单的纯keras来实现一个神经网络,纯keras实现神经网络方便且简单。

要解决的问题fashion-mnist数据集问题:

在这里插入图片描述
这是一个十分类问题。

解决步骤:

  • 数据准备
  • 网络结构设计
  • 损失函数设计
  • 优化方法设计
import warnings
warnings.filterwarnings('ignore')
import numpy as np
from tensorflow.python import keras
fashion_mnist = keras.datasets.fashion_mnist
# 数据准备
(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()
X_train_scaler = X_train_full/255.
X_test_scaler = X_test/255.
X_train_scaler = X_train_scaler.reshape(-1,28*28)
X_test_scaler = X_test_scaler.reshape(-1,28*28)
class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat","Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]
y_train = keras.utils.to_categorical(y_train_full,num_classes=10)
y_test = keras.utils.to_categorical(y_test,num_classes=10)
from matplotlib import pyplot as plt
%matplotlib inline
index = 666
plt.imshow(X_train_scaler[666].reshape(28,28),cmap='gray')
from tensorflow.python.keras.layers import Dense,Softmax,Activation,Input
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.callbacks import ModelCheckpoint,TensorBoard
from tensorflow.python.keras import backend as K
import os
import tensorflow as tf

# 网络架构设计
input_tensor = Input(shape=(784,))
hidden1 = Activation(activation='relu')(Dense(units=32,use_bias=True)(input_tensor))
hidden2 = Activation(activation='relu')(Dense(units=16,use_bias=True)(hidden1))
logits = Dense(units=10,use_bias=True)(hidden2)
pred = Softmax()(logits)

# 损失函数设计: 注意loss和metric的区别
loss_op = keras.losses.categorical_crossentropy

# 模型评估
def accuracy(y_true,y_pred):
    y_t = tf.argmax(y_true,axis=1)
    y_p = tf.argmax(y_pred,axis=1)
    return tf.reduce_mean(tf.cast(tf.equal(y_t,y_p),tf.float32))



# 优化方法设计
train_op = keras.optimizers.sgd()

# 保存模型
savemodel = ModelCheckpoint(filepath='keras_model/model_dnn.h5')

# 模型组装和编译
model = Model(inputs=[input_tensor],outputs=[pred])
model.compile(loss=[loss_op],optimizer=train_op,metrics=[accuracy])


# 可视化
root_logdir = os.path.join(os.curdir, "keras_logs")
def get_run_logdir(): 
    import time
    run_id = time.strftime("run_%Y_%m_%d-%H_%M_%S") 
    return os.path.join(root_logdir, run_id)
run_logdir = get_run_logdir()
print(run_logdir)
tensorboard_cb = TensorBoard(run_logdir)

# 模型的训练
model.fit(X_train_scaler,y_train,epochs=5,validation_data=(X_test_scaler,y_test),callbacks=[savemodel,tensorboard_cb])
  • 查看参数数量和结构
# 查看参数数量和结构
model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 784)               0         
_________________________________________________________________
dense_6 (Dense)              (None, 32)                25120     
_________________________________________________________________
activation_4 (Activation)    (None, 32)                0         
_________________________________________________________________
dense_7 (Dense)              (None, 16)                528       
_________________________________________________________________
activation_5 (Activation)    (None, 16)                0         
_________________________________________________________________
dense_8 (Dense)              (None, 10)                170       
_________________________________________________________________
softmax_2 (Softmax)          (None, 10)                0         
=================================================================
Total params: 25,818
Trainable params: 25,818
Non-trainable params: 0
  • 获取 layers 的名字
# 获取layer的名字
model.layers
[<tensorflow.python.keras.engine.input_layer.InputLayer at 0xb39e3b668>,
 <tensorflow.python.keras.layers.core.Dense at 0xb39e3b860>,
 <tensorflow.python.keras.layers.core.Activation at 0xb39e3b780>,
 <tensorflow.python.keras.layers.core.Dense at 0xb39e3ba58>,
 <tensorflow.python.keras.layers.core.Activation at 0xb39e3b7b8>,
 <tensorflow.python.keras.layers.core.Dense at 0xb39e6a470>,
 <tensorflow.python.keras.layers.advanced_activations.Softmax at 0xb39e3ba90>]
  • 查看参数
# 查看参数
model.layers[1].get_weights()
[array([[ 0.04673344,  0.01502634, -0.07474566, ...,  0.06890095,
         -0.04112365, -0.00896782],
        [-0.00518269, -0.00286345,  0.08053879, ...,  0.07182655,
         -0.01299394, -0.06554333],
        [ 0.08002955, -0.03641549,  0.02303342, ...,  0.0393118 ,
          0.05300613, -0.03454221],
        ...,
        [-0.0828051 ,  0.04777583, -0.02087372, ...,  0.07305664,
          0.06184046,  0.04000294],
        [ 0.01623803, -0.03462012, -0.0404018 , ...,  0.07255101,
          0.01709375,  0.01892226],
        [-0.07676131, -0.00633865,  0.07296253, ..., -0.00274478,
          0.08141113, -0.00275608]], dtype=float32),
 array([-0.13452972,  0.02142563, -0.02201729,  0.1591276 , -0.11847489,
         0.12031773, -0.01768341, -0.01737609,  0.00054321, -0.1729853 ,
         0.04432423, -0.01464177,  0.32178038,  0.25212777,  0.19860578,
         0.1715567 , -0.10305091, -0.16290314,  0.02499877,  0.12938379,
         0.24135025, -0.05990688,  0.0913938 ,  0.20561   ,  0.07127212,
         0.00596112, -0.04965558, -0.01646159,  0.07282738,  0.02870943,
         0.11165093,  0.10920808], dtype=float32)]
  • 加载模型,进行预测
from tensorflow.python.keras.models import load_model
model = load_model('keras_model/model_dnn.h5')
index = 666
img = X_test_scaler[index].reshape(1,-1)
pred = model.predict(img)
print(class_names[np.argmax(pred)])
  • 打印预测
from matplotlib import pyplot as plt
import numpy as np
%matplotlib inline
index = 666
img = X_test_scaler[index]
plt.imshow(img.reshape(28,28),cmap='gray')

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keras是一个基于Python深度学习库,用于创建和训练神经网络。在使用Keras进行水体提取时,可以结合卷积神经网络(Convolutional Neural Networks, CNN)进行图像分割和分类。 为了提取水体,可以采取以下步骤: 1. 数据准备:准备一组水体和非水体的图像样本,这些样本应包含已标注水体和非水体的区域。 2. 数据预处理:在使用样本进行训练之前,需要对样本进行预处理。这包括对图像进行裁剪、缩放和归一化等操作,以确保数据的一致性。 3. 构建卷积神经网络模型:使用Keras搭建一个适合水体提取任务的卷积神经网络模型。可以选择一种常见的架构,如VGGNet、ResNet或U-Net,并根据具体情况进行调整。 4. 训练模型:利用准备好的数据集对模型进行训练。通过反向传播算法不断调整模型参数,使模型能够对水体和非水体进行准确的分类。 5. 模型评估和调优:使用训练好的模型对测试集进行评估,计算模型的精度、召回率、F1分数等指标。根据评估结果,可能需要对模型进行进一步调优。 6. 水体提取:使用训练好的模型对未知图像进行水体提取。将待处理图像输入模型中,模型会对图像进行预测,得到图像中水体的位置和边界。 Keras提供了简洁而强大的API,使得深度学习任务变得更加容易。通过合理选择网络架构和训练样本,结合Keras进行神经网络深度学习水体提取,可以提高水体提取的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值