- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一小时学会TensorFlow2之自定义层由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
通过自定义网络, 我们可以自己创建网络并和现有的网络串联起来, 从而实现各种各样的网络结构. 。
。
Sequential 是 Keras 的一个网络容器. 可以帮助我们将多层网络封装在一起. 。
通过 Sequential 我们可以把现有的层已经我们自己的层实现结合, 一次前向传播就可以实现数据从第一层到最后一层的计算. 。
格式
tf.keras.Sequential( layers=None, name=None)
例子
# 5层网络模型model = tf.keras.Sequential([ tf.keras.layers.Dense(256, activation=tf.nn.relu), tf.keras.layers.Dense(128, activation=tf.nn.relu), tf.keras.layers.Dense(64, activation=tf.nn.relu), tf.keras.layers.Dense(32, activation=tf.nn.relu), tf.keras.layers.Dense(10)])
。
通过 Model 和 Layer 的__init__和call()我们可以自定义层和模型. 。
Model
class My_Model(tf.keras.Model): # 继承Model def __init__(self): """ 初始化 """ super(My_Model, self).__init__() self.fc1 = My_Dense(784, 256) # 第一层 self.fc2 = My_Dense(256, 128) # 第二层 self.fc3 = My_Dense(128, 64) # 第三层 self.fc4 = My_Dense(64, 32) # 第四层 self.fc5 = My_Dense(32, 10) # 第五层 def call(self, inputs, training=None): """ 在Model被调用的时候执行 :param inputs: 输入 :param training: 默认为None :return: 返回输出 """ x = self.fc1(inputs) x = tf.nn.relu(x) x = self.fc2(x) x = tf.nn.relu(x) x = self.fc3(x) x = tf.nn.relu(x) x = self.fc4(x) x = tf.nn.relu(x) x = self.fc5(x) return x
Layer
class My_Dense(tf.keras.layers.Layer): # 继承Layer def __init__(self, input_dim, output_dim): """ 初始化 :param input_dim: :param output_dim: """ super(My_Dense, self).__init__() # 添加变量 self.kernel = self.add_variable("w", [input_dim, output_dim]) # 权重 self.bias = self.add_variable("b", [output_dim]) # 偏置 def call(self, inputs, training=None): """ 在Layer被调用的时候执行, 计算结果 :param inputs: 输入 :param training: 默认为None :return: 返回计算结果 """ # y = w * x + b out = inputs @ self.kernel + self.bias return out
。
CIFAR-10 是由 10 类不同的物品组成的 6 万张彩色图片的数据集. 其中 5 万张为训练集, 1 万张为测试集. 。
import tensorflow as tfdef pre_process(x, y): # 转换x x = 2 * tf.cast(x, dtype=tf.float32) / 255 - 1 # 转换为-1~1的形式 x = tf.reshape(x, [-1, 32 * 32 * 3]) # 把x铺平 # 转换y y = tf.convert_to_tensor(y) # 转换为0~1的形式 y = tf.one_hot(y, depth=10) # 转成one_hot编码 # 返回x, y return x, ydef get_data(): """ 获取数据 :return: """ # 获取数据 (X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data() # 调试输出维度 print(X_train.shape) # (50000, 32, 32, 3) print(y_train.shape) # (50000, 1) # squeeze y_train = tf.squeeze(y_train) # (50000, 1) => (50000,) y_test = tf.squeeze(y_test) # (10000, 1) => (10000,) # 分割训练集 train_db = tf.data.Dataset.from_tensor_slices((X_train, y_train)).shuffle(10000, seed=0) train_db = train_db.batch(batch_size).map(pre_process).repeat(iteration_num) # 迭代20次 # 分割测试集 test_db = tf.data.Dataset.from_tensor_slices((X_test, y_test)).shuffle(10000, seed=0) test_db = test_db.batch(batch_size).map(pre_process) return train_db, test_dbclass My_Dense(tf.keras.layers.Layer): # 继承Layer def __init__(self, input_dim, output_dim): """ 初始化 :param input_dim: :param output_dim: """ super(My_Dense, self).__init__() # 添加变量 self.kernel = self.add_weight("w", [input_dim, output_dim]) # 权重 self.bias = self.add_weight("b", [output_dim]) # 偏置 def call(self, inputs, training=None): """ 在Layer被调用的时候执行, 计算结果 :param inputs: 输入 :param training: 默认为None :return: 返回计算结果 """ # y = w * x + b out = inputs @ self.kernel + self.bias return outclass My_Model(tf.keras.Model): # 继承Model def __init__(self): """ 初始化 """ super(My_Model, self).__init__() self.fc1 = My_Dense(32 * 32 * 3, 256) # 第一层 self.fc2 = My_Dense(256, 128) # 第二层 self.fc3 = My_Dense(128, 64) # 第三层 self.fc4 = My_Dense(64, 32) # 第四层 self.fc5 = My_Dense(32, 10) # 第五层 def call(self, inputs, training=None): """ 在Model被调用的时候执行 :param inputs: 输入 :param training: 默认为None :return: 返回输出 """ x = self.fc1(inputs) x = tf.nn.relu(x) x = self.fc2(x) x = tf.nn.relu(x) x = self.fc3(x) x = tf.nn.relu(x) x = self.fc4(x) x = tf.nn.relu(x) x = self.fc5(x) return x# 定义超参数batch_size = 256 # 一次训练的样本数目learning_rate = 0.001 # 学习率iteration_num = 20 # 迭代次数optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate) # 优化器loss = tf.losses.CategoricalCrossentropy(from_logits=True) # 损失network = My_Model() # 实例化网络# 调试输出summarynetwork.build(input_shape=[None, 32 * 32 * 3])print(network.summary())# 组合network.compile(optimizer=optimizer, loss=loss, metrics=["accuracy"])if __name__ == "__main__": # 获取分割的数据集 train_db, test_db = get_data() # 拟合 network.fit(train_db, epochs=5, validation_data=test_db, validation_freq=1)
输出结果
Model: "my__model" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= my__dense (My_Dense) multiple 786688 _________________________________________________________________ my__dense_1 (My_Dense) multiple 32896 _________________________________________________________________ my__dense_2 (My_Dense) multiple 8256 _________________________________________________________________ my__dense_3 (My_Dense) multiple 2080 _________________________________________________________________ my__dense_4 (My_Dense) multiple 330 ================================================================= Total params: 830,250 Trainable params: 830,250 Non-trainable params: 0 _________________________________________________________________ None (50000, 32, 32, 3) (50000, 1) 2021-06-15 14:35:26.600766: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2) Epoch 1/5 3920/3920 [==============================] - 39s 10ms/step - loss: 0.9676 - accuracy: 0.6595 - val_loss: 1.8961 - val_accuracy: 0.5220 Epoch 2/5 3920/3920 [==============================] - 41s 10ms/step - loss: 0.3338 - accuracy: 0.8831 - val_loss: 3.3207 - val_accuracy: 0.5141 Epoch 3/5 3920/3920 [==============================] - 41s 10ms/step - loss: 0.1713 - accuracy: 0.9410 - val_loss: 4.2247 - val_accuracy: 0.5122 Epoch 4/5 3920/3920 [==============================] - 41s 10ms/step - loss: 0.1237 - accuracy: 0.9581 - val_loss: 4.9458 - val_accuracy: 0.5050 Epoch 5/5 3920/3920 [==============================] - 42s 11ms/step - loss: 0.1003 - accuracy: 0.9666 - val_loss: 5.2425 - val_accuracy: 0.5097 。
到此这篇关于一小时学会TensorFlow2之自定义层的文章就介绍到这了,更多相关TensorFlow2自定义层内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/weixin_46274168/article/details/117919277 。
最后此篇关于一小时学会TensorFlow2之自定义层的文章就讲到这里了,如果你想了解更多关于一小时学会TensorFlow2之自定义层的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有 0 小时、3 小时、12 小时、24 小时、48 小时的数据组……我想绘制这些数据的图表,以便保留时间的比例。 runs <- c(1:25) hours <- as.factor(c(0, 3
例如,如果我选择了时间:下午 3 点和小时数:5 小时,则得到 (8pm) 作为答案“ 最佳答案 let calendar = Calendar.current let date = calendar
我有一个包含两个日期时间字段的表单。用户输入日期 (yyyy-mm-dd) 和时间(3 个框;小时、分钟、上午/下午)。 出于某种原因,第一个没有保存为 24 小时制。 以下数据为输入结果: 2011
我一直在尝试使用导出单位进行计算,但到目前为止我还没有取得任何成果。 我已经尝试过mathjs ,但如果我输入 1 小时 * 1 英里/小时,我会得到 UnsupportedTypeError: Fu
我有两组要运行的 cronjob。第一个应该每 3 小时运行一次,第二个也应该每 3 小时运行一次,但比第一组晚一个小时。什么是正确的语法? // every 3 hours 17 */3 * *
我知道 AWS 中的预留实例更多的是计费而不是实际实例——它们没有附加到实际实例——我想知道: 如果我在特定区域和可用区中购买特定时间的预留实例 - 如果我每天 24 小时使用单个实例与运行 24 个
我试过: seq( from=as.POSIXct("2012-1-1 0", tz="UTC"), to=as.POSIXct("2012-1-3 23", tz="UTC"),
我有一个带有“日期”列的表。我想按小时分组指定日期。 最佳答案 Select TO_CHAR(date,'HH24') from table where date = TO_DATE('2011022
我知道如何在 SQL (SQL Server) 中获取当前日期,但要获取当天的开始时间: select dateadd(DAY, datediff(day, 0, getdate()),0) (res
我正在尝试在游戏之间创建一个计时器,以便用户在失去生命后必须等待 5 分钟才能再次玩游戏。但是我不确定最好的方法是什么。 我还需要它来防止用户在“设置”中编辑他们的时间。 实现这一目标的最佳方法是什么
我的查询有误。该错误显示预期的已知函数,得到“HOUR”。如果我删除这部分,查询将正常工作 (AND HOUR({$nowDate}) = 11) SELECT c FROM ProConvocati
var d1 = new Date(); var d2 = new Date(); d2.setHours(d1.getHours() +01); alert(d2); 这部分没问题。现在我试图在 (
我正在构建一个用于练习的基本时钟应用程序,但出于某种原因,时间不会自动更改为最新的分钟或小时。例如,当前时间是 17:56,但它显示的是 17:54,这是我打开应用程序的最后时间。 NSDate *n
我创建了一张图片,我想将其用作页面的 hr。当它被上传时,它一直向左对齐。我希望它居中,在标题下。这是我的 CSS 代码: .section-underline { height: 35px
这个问题已经有答案了: Getting difference in seconds from two dates in JavaScript (2 个回答) 已关闭 4 年前。 我想计算两个具有不同格
我需要计算到某个日期/时间的剩余时间(天/小时)。 但是,我没有使用静态日期。 假设我在 每个星期日 的 17:00 有一个事件。我需要显示到下一个事件的剩余时间,即即将到来的星期日 17:00。 我
我正在执行这个脚本: SELECT EXTRACT(HOUR FROM TIMEDIFF('2009-12-12 13:13:13', NOW())); 我得到:-838。这是提取时 MySQL 可以
复制代码 代码如下: /** * 小时:分钟的正则表达式检查<br> * <br> * @param pInput 要检查的字符串 * @return boolean 返
连wifi5元/小时 独领风骚 朕好帅 今晚你是我的人 十里桃花 高端定制厕所VP专用 一只老母猪 在家好无聊 你爹的wifi 密码是叫爸爸全拼 关晓彤和鹿晗分手了吗 蹭了我的
我有以下数据框列: 我需要将 csv 列中的对象字符串数据转换为总秒数。 示例:10m -> 600s 我试过这段代码: df.duration = str(datetime.timedelta(df
我是一名优秀的程序员,十分优秀!