Tensorflow三种建模方式实例(鸢尾花卉数据集)

一、顺序模型

from sklearn import datasets
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
iris = datasets.load_iris()
data = iris.data
labels = iris.target
data = np.concatenate((data,labels.reshape(150,1)),axis=-1)
np.random.shuffle(data)
#备注X是特征,Y是label。
Y = data[:,-1]### 第5列
X = data[:,:4]###除了最后一个取全部
##此处需定义模型
#三种模型分别尝试(第一种)
model = tf.keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(4,)),#第一层
    layers.Dense(64, activation='relu'),#第二层
    layers.Dense(10)#第三层
    #。。。。。
])
####模型训练
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

#keras
model.fit(X, Y, batch_size=32, epochs=100,shuffle=True)

tf.keras.Model.fit (用于模型训练)

  • epochs:训练分为几个时期。每一个epoch是对整个输入数据的一次迭代(此操作以较小的批次完成)。
  • batch_size:当传递NumPy数据时,模型将数据切成较小的批次,并在训练期间对这些批次进行迭代。该整数指定每个批次的大小。请注意,如果不能将样本总数除以批次大小,则最后一批可能会更小。
  • validation_data:在模型训练时,监控在某些验证数据上监视其性能。传递此参数(输入和标签的元组)可以使模型在每个时期结束时以推断模式显示所传递数据的损失和度量。

二、函数式模型

from sklearn import datasets
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
iris = datasets.load_iris()
data = iris.data
labels = iris.target
data = np.concatenate((data,labels.reshape(150,1)),axis=-1)
np.random.shuffle(data)
#备注X是特征,Y是label。
Y = data[:,-1]### 第5列
X = data[:,:4]###除了最后一个取全部
##此处需定义模型
#三种模型分别尝试(第二种)
inputs = tf.keras.Input(shape=(4,))
# inputs = tf.keras.Input(shape=(4,))
x = layers.Dense(64, activation='relu')(inputs) #第一层
x = layers.Dense(64, activation='relu')(x) #第二层
predictions = layers.Dense(10)(x) #第三层
model = tf.keras.Model(inputs=inputs, outputs=predictions)
####模型训练
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

#keras
model.fit(X, Y, batch_size=32, epochs=100,shuffle=True)

三、模型子类化

from sklearn import datasets
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
iris = datasets.load_iris()
data = iris.data
labels = iris.target
data = np.concatenate((data,labels.reshape(150,1)),axis=-1)
np.random.shuffle(data)
#备注X是特征,Y是label。
Y = data[:,-1]### 第5列
X = data[:,:4]###除了最后一个取全部
##此处需定义模型
#三种模型分别尝试(第三种)
class MyModel(tf.keras.Model):

    def __init__(self, num_classes=4):
        super(MyModel, self).__init__(name='my_model')
        self.num_classes = num_classes
        # 定义自己需要的层
        self.dense_1 = layers.Dense(32, activation='relu') #
        self.dense_2 = layers.Dense(num_classes)

    def call(self, inputs):
        #定义前向传播
        # 使用在 (in `__init__`)定义的层
        x = self.dense_1(inputs)
        x = self.dense_2(x)
        return x
####模型训练
model = MyModel(num_classes=4)
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

#keras
model.fit(X, Y, batch_size=32, epochs=100, shuffle=True)

你可能感兴趣的:(TensorFlow,2.0,框架,tensorflow,深度学习,keras)