傻瓜式php网站开发,券多多是谁做的网站,推荐商城网站建设,群晖外网访问wordpress时格式变完政安晨的个人主页#xff1a;政安晨 欢迎 #x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益#xff0c;如有不足之处#xff0c;欢迎在评论区提出指正#xff01; 介绍
通过 Keras#xff0c;您可以编写自定… 政安晨的个人主页政安晨 欢迎 点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益如有不足之处欢迎在评论区提出指正 介绍
通过 Keras您可以编写自定义层、模型、度量指标、损失和优化器并在同一代码库中跨 TensorFlow、JAX 和 PyTorch 运行。
老规矩咱们还是先准备环境参考我本专栏目录中的文章其中有搭建环境的部分
政安晨【TensorFlow与Keras实战演绎机器学习】专栏 —— 目录https://blog.csdn.net/snowdenkeke/article/details/136985399
准备好环境后咱们开始。
编写组件
让我们先来看看自定义层 {keras.ops 命名空间包含} 1. NumPy API 的实现例如 keras.ops.stack 或 keras.ops.matmul。 2. 一组 NumPy 中没有的神经网络特定操作如 keras.ops.conv 或 keras.ops.binary_crossentropy。 让我们创建一个可与所有后端配合使用的自定义密集层
class MyDense(keras.layers.Layer):def __init__(self, units, activationNone, nameNone):super().__init__(namename)self.units unitsself.activation keras.activations.get(activation)def build(self, input_shape):input_dim input_shape[-1]self.w self.add_weight(shape(input_dim, self.units),initializerkeras.initializers.GlorotNormal(),namekernel,trainableTrue,)self.b self.add_weight(shape(self.units,),initializerkeras.initializers.Zeros(),namebias,trainableTrue,)def call(self, inputs):# Use Keras ops to create backend-agnostic layers/metrics/etc.x keras.ops.matmul(inputs, self.w) self.breturn self.activation(x)
接下来让我们制作一个依赖于keras.random命名空间的自定义Dropout层
class MyDropout(keras.layers.Layer):def __init__(self, rate, nameNone):super().__init__(namename)self.rate rate# Use seed_generator for managing RNG state.# It is a state element and its seed variable is# tracked as part of layer.variables.self.seed_generator keras.random.SeedGenerator(1337)def call(self, inputs):# Use keras.random for random ops.return keras.random.dropout(inputs, self.rate, seedself.seed_generator)
接下来让我们编写一个自定义子类模型使用我们的两个自定义层
class MyModel(keras.Model):def __init__(self, num_classes):super().__init__()self.conv_base keras.Sequential([keras.layers.Conv2D(64, kernel_size(3, 3), activationrelu),keras.layers.Conv2D(64, kernel_size(3, 3), activationrelu),keras.layers.MaxPooling2D(pool_size(2, 2)),keras.layers.Conv2D(128, kernel_size(3, 3), activationrelu),keras.layers.Conv2D(128, kernel_size(3, 3), activationrelu),keras.layers.GlobalAveragePooling2D(),])self.dp MyDropout(0.5)self.dense MyDense(num_classes, activationsoftmax)def call(self, x):x self.conv_base(x)x self.dp(x)return self.dense(x)
让我们编译并适配它
model MyModel(num_classes10)
model.compile(losskeras.losses.SparseCategoricalCrossentropy(),optimizerkeras.optimizers.Adam(learning_rate1e-3),metrics[keras.metrics.SparseCategoricalAccuracy(nameacc),],
)model.fit(x_train,y_train,batch_sizebatch_size,epochs1, # For speedvalidation_split0.15,
)
现在咱们演绎如下
在本地的TensorFlow虚拟环境中首先导入keras
from tensorflow import keras
(可以在Jupyter Notebook中运行)
如果在演绎执行中出错可能是Keras版本问题使用如下命令升级keras。
sudo pip install --upgrade keras
执行结果 训练模型
在任意数据源上训练模型
所有的Keras模型都可以在各种数据来源上进行训练和评估与您使用的后端无关。这包括
NumPy数组 Pandas数据框 TensorFlow tf.data.Dataset对象 PyTorch DataLoader对象 Keras PyDataset对象 无论您使用TensorFlow、JAX还是PyTorch作为Keras后端它们都可以工作。
让我们尝试使用PyTorch DataLoader
import torch# Create a TensorDataset
train_torch_dataset torch.utils.data.TensorDataset(torch.from_numpy(x_train), torch.from_numpy(y_train)
)
val_torch_dataset torch.utils.data.TensorDataset(torch.from_numpy(x_test), torch.from_numpy(y_test)
)# Create a DataLoader
train_dataloader torch.utils.data.DataLoader(train_torch_dataset, batch_sizebatch_size, shuffleTrue
)
val_dataloader torch.utils.data.DataLoader(val_torch_dataset, batch_sizebatch_size, shuffleFalse
)model MyModel(num_classes10)
model.compile(losskeras.losses.SparseCategoricalCrossentropy(),optimizerkeras.optimizers.Adam(learning_rate1e-3),metrics[keras.metrics.SparseCategoricalAccuracy(nameacc),],
)
model.fit(train_dataloader, epochs1, validation_dataval_dataloader)现在让我们尝试使用tf.data来完成这个任务
import tensorflow as tftrain_dataset (tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(batch_size).prefetch(tf.data.AUTOTUNE)
)
test_dataset (tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(batch_size).prefetch(tf.data.AUTOTUNE)
)model MyModel(num_classes10)
model.compile(losskeras.losses.SparseCategoricalCrossentropy(),optimizerkeras.optimizers.Adam(learning_rate1e-3),metrics[keras.metrics.SparseCategoricalAccuracy(nameacc),],
)
model.fit(train_dataset, epochs1, validation_datatest_dataset)