Keras 生成器报错:Tensor object has no attrbute ‘assign‘

一、keras生成器重心

我是在使用keras生成器时出现了这个报错并引发后续一系列报错
keras生成器使用的是studyer_domi:《2020-12-11 keras通过model.fit_generator训练模型(节省内存)》链接: l2020-12-11 keras通过model.fit_generator训练模型(节省内存).

其实根本不用管yield的问题,生成器就是起到连续调用函数,可以遍历return结果的方式。
因而keras生成器处重点反而在于keras网络配置上的不一样的地方

二、keras生成器

def data_generate(lis):
    count=1
    batch_size = 10
    while 1:
        batch_x = [x[0] for x in lis[(count - 1) * batch_size:count * batch_size]]
        batch_y = [y[1] for y in lis[(count - 1) * batch_size:count * batch_size]]
        batch_x = np.array([np.asarray(get_wav_mfcc(i)) for i in batch_x])
        batch_y =np.array(batch_y)
        count = count + 1
        yield batch_x, batch_y
"""lis的形状为[["xxx.wav",[0. 1. 0. 0. 0.]],
						["sss.wav",[0. 0. 1. 0. 0.]],
						["zzz.wav",[0. 0. 0. 0. 1.]],]
						这样二维张量形式"""
	#其中“xxx.wav”等就是需要处理文件的路径,我的是音频文件,如上所述,get_wav_mfcc(i)对音频进行读取并返回数值型的数据
	#而[0. 1. 0. 0. 0.]是已经编码好的one-hot标签
	#两个格式都是numpy.array

具体格式如下:
在这里插入图片描述

三、报错

在此处记录遇到的报错,这些报告基本与keras有关,也是我之前在model.fit()中没有修改过来的地方

报错一:

ValueError: Please provide as model inputs either a single array or a list of arrays. You passed: x=<generator object data_generate at 0x0000028725967D68>

在这里插入图片描述

这是由于model.fit()没有修改为model.fit_generator()

报错二:

RuntimeError: You must compile your model before using it.

在这里插入图片描述

这是由于没有设置input_shape,但是在model.fit()中不用设置这一参数也可训练
应该修改为:

model = Sequential()
model.add(Dense(2048, activation='relu',input_shape=(32000,)))

第三个报错:

Tensor object has no attrbute 'assign'

在这里插入图片描述

model.add(Dense(num_class, activation='softmax'))

修改为

model.add(Dense(11, activation='softmax'))

11是我自己标签种类,需要按自己的标签种类设置

tf.assign是变量替换,tf.assign(x,new_x) 等价于x = new_x

上述修改完成后就可以训练了
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值