终于把tensorflow输入层和输出层搞懂了!fit函数与输入层,输出层,tf.keras.Model输入和输出的关系

2024-06-10 19:44

本文主要是介绍终于把tensorflow输入层和输出层搞懂了!fit函数与输入层,输出层,tf.keras.Model输入和输出的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结论

fit函数与输入层,输出层,tf.keras.Model输入和输出的关系

  • fit函数使用dataset格式,输入为字典格式,假设tf.keras.Model中输入和输出为字典格式(2.2或2.3),dataset的key必须和2.2或2.3中字典的key一致,否则报错
  • fit函数使用dataset格式,输入为仍然是字典格式,假设tf.keras.Model中输入和输出为list格式(2.1),dataset的key必须和2.1涉及到的**输入层和输出层(1.1和1.2)**的层名一致,否则报错

1. 定义模型输入和输出

1.1 定义模型输入层

continuous_input = {key: tf.keras.layers.Input(shape=(), name=key) for key in continuous_feature}
discrete_input = {key: tf.keras.layers.Input(shape=(), name=key) for key in discrete_feature}  

1.2 定义模型输出层

output_1 = tf.keras.layers.Dense(1, activation='sigmoid', name='is_click')(x)
output_2 = tf.keras.layers.Dense(1, activation='sigmoid', name='is_play')(x)
output_3 = tf.keras.layers.Dense(1, activation='sigmoid', name='is_pay')(x)

2. tf.keras.Model输入和输出

2.1 输入和输出为list格式

model_func = tf.keras.Model(inputs=list(continuous_input.values()) + list(discrete_input.values()),outputs=[output_1, output_2,  output_3])

2.2 输出为dict格式

model_func = tf.keras.Model(inputs=list(continuous_input.values()) + list(discrete_input.values()),outputs={'is_click': output_1, 'is_play': output_2, 'is_pay': output_3})

2.3 输入为dict格式

# 构造输入字典,也可以其他方式构造,此处只是为了说明,continuous_input为字典
continuous_input.update(discrete_input)
model_func = tf.keras.Model(inputs=continuous_input,outputs=[output_1, output_2,  output_3])

3. fit函数中输入和输出-dataset(tfrecord格式)

3.1 dataset定义

def _parse_function(example_proto, feature_description):# Parse the input `tf.Example` proto using the dictionary above.data = tf.io.parse_single_example(example_proto, feature_description)is_click = data.pop('is_click')is_play = data.pop('is_play')is_pay = data.pop('is_pay')return data, {'is_click': is_click, 'is_play': is_play, 'is_pay': is_pay}

3.2 dataset示例-batch_size=1024

dataset为字典格式,请注意!

({'age': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.3448276 , 0.27586207, 0.31034482, ..., 0.37931034, 0.44827586,0.1724138 ], dtype=float32)>, 'first_class_id': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([ 4,  1,  1, ...,  4, 15,  1], dtype=int64)>, 'gender': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([2, 1, 2, ..., 2, 2, 1], dtype=int64)>, 'married': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([2, 2, 2, ..., 1, 1, 1], dtype=int64)>, 'province': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([22, 23, 25, ..., 14, 18, 20], dtype=int64)>, 'second_class_id': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([23, 53, 24, ..., 29, 11, 47], dtype=int64)>, 'tag_id': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([ 5, 58,  6, ..., 17, 76, 49], dtype=int64)>, 'target_item_id': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([ 5, 58,  6, ..., 17, 76, 49], dtype=int64)>, 'type': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([1, 4, 1, ..., 2, 1, 1], dtype=int64)>, 'user_click_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.5       , 0.5833333 , 1.        , ..., 0.41666666, 0.33333334,0.6666667 ], dtype=float32)>, 'user_click_video_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.5       , 0.5833333 , 0.8333333 , ..., 0.41666666, 0.33333334,0.6666667 ], dtype=float32)>, 'user_exp_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.47826087, 0.5797101 , 0.6231884 , ..., 0.3768116 , 0.6086956 ,0.26086956], dtype=float32)>, 'user_exp_video_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.61290324, 0.61290324, 0.58064514, ..., 0.32258064, 0.61290324,0.4516129 ], dtype=float32)>, 'user_id': <tf.Tensor: shape=(1024,), dtype=string, numpy=
array([b'ffb07508-9acc-4253-a1a0-e3e7fc6fad58',b'1ac654df-2b93-47b8-80ba-ca15642b5919',b'69daac99-ad14-4fc8-80f7-8c80cbc221b3', ...,b'97366ccc-b10d-47cb-9ad6-956c535ccf87',b'a7f43278-9e9b-4500-98b7-6d536d680ac1',b'297e2eec-a491-4aab-bc96-24f806751eb1'], dtype=object)>, 'user_name': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([234, 239, 285, ..., 753, 222, 563], dtype=int64)>, 'user_pay_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'user_pay_video_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'user_play_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'user_play_video_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'video_click_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.4722222, 0.5      , 0.6666667, ..., 0.8333333, 0.6666667,0.4722222], dtype=float32)>, 'video_click_user_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.4       , 0.51428574, 0.6857143 , ..., 0.7714286 , 0.71428573,0.4857143 ], dtype=float32)>, 'video_duration': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.8046324 , 0.19939578, 0.52970797, ..., 0.40584087, 0.5800604 ,0.15005036], dtype=float32)>, 'video_exp_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.7175141 , 0.4858757 , 0.7627119 , ..., 0.69491524, 0.4519774 ,0.6384181 ], dtype=float32)>, 'video_exp_user_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.85057473, 0.4827586 , 0.83908045, ..., 0.7011494 , 0.3908046 ,0.54022986], dtype=float32)>, 'video_id': <tf.Tensor: shape=(1024,), dtype=string, numpy=
array([b'HVgLcemGqaFAYgyEemtb', b'YNfPZPQwWggZRBkSsjMG',b'AvTonQbyvahPSCjsLvqN', ..., b'tvcZUdJBXAzJxsOZkXIc',b'HxnekvQEXBAgptCkNpXQ', b'RGumXWzhSqSoikFAZcWH'], dtype=object)>, 'video_name': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([15, 60,  1, ..., 25, 70, 47], dtype=int64)>, 'video_pay_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'video_pay_user_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'video_play_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.6666667 , 0.5555556 , 0.7777778 , ..., 0.6666667 , 0.44444445,0.33333334], dtype=float32)>, 'video_play_user_cnt': <tf.Tensor: shape=(1024,), dtype=float32, numpy=
array([0.6666667 , 0.5555556 , 0.7777778 , ..., 0.6666667 , 0.44444445,0.33333334], dtype=float32)>, 'work': <tf.Tensor: shape=(1024,), dtype=int64, numpy=array([1, 2, 2, ..., 2, 3, 3], dtype=int64)>}, {'is_click': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'is_play': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>, 'is_pay': <tf.Tensor: shape=(1024,), dtype=float32, numpy=array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)>})

4. fit函数与输入层,输出层,tf.keras.Model输入和输出的关系

  • fit函数使用dataset格式,输入为字典格式,假设tf.keras.Model中输入和输出为字典格式(2.2或2.3),dataset的key必须和2.2或2.3中字典的key一致,否则报错
  • fit函数使用dataset格式,输入为仍然是字典格式,假设tf.keras.Model中输入和输出为list格式(2.1),dataset的key必须和2.1涉及到的**输入层和输出层(1.1和1.2)**的层名一致,否则报错

这篇关于终于把tensorflow输入层和输出层搞懂了!fit函数与输入层,输出层,tf.keras.Model输入和输出的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049096

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成