Sequential model should have a single output tensor. For multi-output layers,use the functional API.

2024-01-26 00:32

本文主要是介绍Sequential model should have a single output tensor. For multi-output layers,use the functional API.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个错误的原因在于不知道啥叫序列化模型,keras的模型都是序列化堆叠的模型,如果你觉得不好用,你可以直接用tf的函数构建,不要嫌弃keras,人家本来就是高级API,你想知道更多,你用低级的API呗

非要用LSTM中的状态也可以,先了解下参数,啥都不了解就不要轻易下结论,不被人笑死??

input_data = tf.keras.layers.Input(shape=(12,3))
hidden_1, state_h, state_c = tf.keras.layers.LSTM(units=16, return_state=True, return_sequences=True)(input_data,)
hidden_2 = tf.keras.layers.LSTM(units=16, )(hidden_1, initial_state=[state_h, state_c])#, training=True
hidden_3 = tf.keras.layers.Dense(10, activation='relu')(hidden_2)
output = tf.keras.layers.Dense(1, activation='sigmoid')(hidden_3)
model = tf.keras.models.Model(inputs=input_data, outputs=output)

这不就是状态的应用吗?注意:第2个units与第一个保持一致,否则出错。

但绝大多数都有一个疑问,为啥很多序列化模型根本不要这种状态的复用(作为下一层的输入)?

这是因为红字,如果不一致的话,其实这种状态的输入shape是不对的,下面小明哥举例说明,证实无论是否有状态的输入都是有效的,因为隐层的结果保留了,而状态值真的发挥作用了吗??以MNIST数据为例说明,(随时复盘,保持低调)

【我蒙蔽了,没GPU电脑70s,服务器100多s,,,什么鬼】

另外也没有收敛的迹象,因此可以断定,网络参数不对。

凡是第一层网络达不到acc0.2的都不对,如果units不太大,如32,16,一个epoch不可能1分钟,参数还是不对。

另外训练时,acc逐渐变小,参数仍是不对。这是显然的。所以尽量训练多次,看看是不是acc逐渐增加。如下这种就是不对。

在上面代码的修改下我是无论如何也调不好的,状态作为输入真不好调,我还是尝试LSTMCell这种进行尝试

loss减小,acc也减小的也是错。

针对上面的奇怪现象老子搜了发现,最后一层的激活函数错了,不该用relu,这特么。。。改后如下

下面再次尝试将状态输入,发现需要训练的参数并没有减少,而是一样的,训练速度(收敛)也没有加快。网络对比

结果对比

请问状态值在这里面有用吗?是我参数还没设置正确,还没达到效果,抑或是因为图像里面的确没有什么用?我暂时也找不到好的语音分类的mnist,不评价

如果想用LSTMCell,请堆叠至少两层相同Cell,否则容易出错。模型参数是一样的,如下(训练结果也是一样的)

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 28, 28)]          0         
_________________________________________________________________
rnn (RNN)                    (None, 32)                16128     
_________________________________________________________________
dense (Dense)                (None, 10)                330       
=================================================================
Total params: 16,458
Trainable params: 16,458
Non-trainable params: 0

这里深究下,里面状态是否作为下个Cell的输入?如下推断是否是正确的,暂时认为正确吧

>>> Cell=tf.keras.layers.LSTMCell(units=32,)
>>> Cell(input_data)
Traceback (most recent call last):File "<pyshell#165>", line 1, in <module>Cell(input_data)File "D:\python\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 854, in __call__outputs = call_fn(cast_inputs, *args, **kwargs)
TypeError: call() missing 1 required positional argument: 'states'

单层的Cell是需要states状态值的,说明里面的状态是作为下层的输入的,

综上,LSTM不需要考虑状态啥的,直接keras序列化模型即可,如有疑问,请给出过程和结果,为保持一致,数据提供如下:

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data(path='mnist.npz')
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = x_train.astype(np.float32)
x_test = x_test.astype(np.float32)

没有代码的交流都是扯淡,毫无意义!

Talk is cheap,show me the codes

 

For Video Recommendation in Deep learning QQ Group 277356808

For Speech, Image, Video in deep learning QQ Group 868373192

I'm here waiting for you

这篇关于Sequential model should have a single output tensor. For multi-output layers,use the functional API.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/645113

相关文章

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Pydantic中model_validator的实现

《Pydantic中model_validator的实现》本文主要介绍了Pydantic中model_validator的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录引言基础知识创建 Pydantic 模型使用 model_validator 装饰器高级用法mo

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo