【tf.keras】官方教程之一 Keras overview

在这里插入图片描述
在这里插入图片描述
这里的evaluate和上面的validation_freq是一样的,区别在于什么呢?区别在在于validation_freq是在traing中间进行的,为什么中间进行呢?因为在training的时候,我也不知道traing什么时候是个头,有可能traing10天,有可能是3个月,有可能更久,那么什么时候停止呢?我这个时候,就会隔一段时间做一次validation_freq或者隔一段时间做一次test,比如根据(我再中间写一段代码if test_accuracy>0.99,我就把当前的状态save住,我就把这个循环跳出来break;这个就是中间做一个validation的好处,我们可以随时的停止,所以这一部分可以提前终止不一定完成10个epoch,这10epoch一般是我们指定的最大的epoch,达到我们的需求可以提前的终止,当跳完这句话话后就是evaluate还要做一次测试,来验证,只需要给一个数据集;其实就相当于一次valuation_freq;当然这个测试的数据集也可以不用这个ds_val数据集,我们可以找另外一个,这样更加公平,公正!

代码示例:

# keras使用示例
# 全连接层:每一个结点都与上一层的所有结点相连,用来把前边提取到的特征结合起来。由于其全相连的特性,一般全连接层的参数也是最多的。
# F:Function函数 C:Class类 V:Variable变量 f:Field属性 p:Parameter 参数 / python内置函数
def testKeras():
    # 加载鸢尾花数据集
    train_x = sklearn.datasets.load_iris().data            # (150, 4)
    train_y = sklearn.datasets.load_iris().target          # (150, )
    # onehot_y = tf.keras.utils.to_categorical(train_y)    # (150, 3) 转换为独热编码

    # 打乱数据集
    np.random.seed(116)
    np.random.shuffle((train_x))
    np.random.seed(116)
    np.random.shuffle(train_y)

    # 搭建模型/神经网络架构 kernel表示权重参数W
    model = tf.keras.models.Sequential([tf.keras.layers.Dense(5, activation="relu", input_dim=4),
                                      tf.keras.layers.Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2(0.0001))])
    # model = tf.keras.models.Sequential()
    # model.add(tf.keras.layers.Dense(5, activation="relu", input_dim=4))
    # model.add(tf.keras.layers.Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2(0.0001)))

    # 编译模型
    model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-7),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
                  metrics=["sparse_categorical_accuracy"])

    # 运行模型
    model.fit(train_x, train_y, batch_size=32, epochs=500, validation_split=0.2, validation_freq=50)

    # 打印信息
    model.summary()

    # 验证模型
    loss_and_metrics = model.evaluate(train_x, train_y, batch_size=64) # list类型 [loss, metric]

    # 预测模型
    prediction = model.predict(train_x, batch_size=128) # (150, 3)


class IrisModel(tf.keras.Model):
    # 定义所需网络结构快
    def __init__(self):
        super(IrisModel, self).__init__()
        # 定义网络结构快
        self.d_1 = tf.keras.layers.Dense(5, activation="relu", input_dim=4)
        self.d_2 = tf.keras.layers.Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2(0.0001))

    # 写出前向传播
    def call(self, X):
        # 调用网络结构快,实现前向传播
        A1 = self.d_1(X)
        y =self.d_2(A1)
        return y


def testKeras2():
    # 加载鸢尾花数据集
    train_x = sklearn.datasets.load_iris().data  # (150, 4)
    train_y = sklearn.datasets.load_iris().target  # (150, )

    # 打乱数据集
    np.random.seed(116)
    np.random.shuffle((train_x))
    np.random.seed(116)
    np.random.shuffle(train_y)

    # 定义模型
    model = IrisModel()
    # 编译模型
    model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
                  metrics=["sparse_categorical_accuracy"])
    # 启动模型
    model.fit(train_x, train_y, batch_size=32, epochs=500, validation_split=0.2, validation_freq=50)

    #打印信息
    model.summary()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
categorical_accuracy:检查最大真实值的index是否等于最大预测值的index。
sparse_categorical_accuracy:检查最大真实值是否等于最大预测值的index。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 自定义层
class MyLayer(tf.keras.layers.Layer):

    def __init__(self, output_dim, **kwargs):
        super(MyLayer, self).__init__(**kwargs)  # 初始化layers.Layer变量
        self.output_dim = output_dim  # 输出个数的定义

    def build(self, input_shape):  # 添加权重矩阵
        # Create a trainable weight variable for this layer.
        self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], self.output_dim), initializer='uniform',
                                      trainable=True)

    def call(self, inputs):  # 定义前向过程
        return tf.matmul(inputs, self.kernel)

    def get_config(self):
        base_config = super(MyLayer, self).get_config()
        base_config['output_dim'] = self.output_dim
        return base_config

    @classmethod
    def from_config(cls, config):
        return cls(**config)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值