在当今的科技世界中,面临着许多选择,这些选择虽然不一定都是最佳选项,但它们的存在让感到自由,不再受限。本文将探讨如何利用TensorFlow和Keras这两种强大的工具来构建深度学习模型,也就是神经网络。TensorFlow是由谷歌维护和开发的开源平台,用于机器学习。而Keras是一个提供Python接口的开源软件库,专门用于深度学习神经网络,并且作为TensorFlow库的接口。
顺序模型API允许以一种线性的方式堆叠神经网络层,每一层都恰好有一个输入张量和一个输出张量。这种模型适用于简单的线性堆叠场景,但不适合复杂的网络结构,比如需要多输入多输出、层共享或非线性拓扑的情况。下面是一个使用顺序模型API构建三层神经网络的示例代码:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Dense(2, activation="relu", name="layer1"),
layers.Dense(3, activation="relu", name="layer2"),
layers.Dense(4, name="layer3"),
])
x = tf.ones((3, 3))
y = model(x)
在上述代码中,通过堆叠三个全连接层来创建一个单一的路径。这种模型的局限性在于它不能处理更复杂的网络结构,比如需要多输入多输出、层共享或非线性拓扑的情况。
Keras的功能模型API提供了一种更灵活的方式来构建模型,它可以轻松处理非线性拓扑、共享层以及多输入或输出的情况。功能模型API的核心思想是将深度学习模型视为一个有向无环图(DAG)的层结构。使用功能模型API,可以将层作为函数来使用,输入作为函数的参数,输出则作为进一步使用的输出。下面是一个使用功能模型API构建三层神经网络的示例代码:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
inputs = keras.Input(shape=(784,))
dense = layers.Dense(64, activation="relu")
x = dense(inputs)
x = layers.Dense(64, activation="relu")(x)
outputs = layers.Dense(10)(x)
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model")
model.summary()
class MyModel(tf.keras.Model):
def __init__(self, num_classes=2):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(64, activation="relu")
self.dense2 = tf.keras.layers.Dense(64, activation="relu")
self.classifier = tf.keras.layers.Dense(num_classes)
def call(self, inputs):
x = self.dense1(inputs)
x = self.dense2(x)
return self.classifier(x)
model = MyModel()
dataset = ...
model.fit(dataset, epochs=10)
model.save(filepath)