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

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%