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

Tensor has no attrbute assign

  • 一、keras生成器重心
  • 二、keras生成器
  • 三、报错

一、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 生成器报错:Tensor object has no attrbute ‘assign‘_第1张图片

三、报错

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

报错一:

ValueError: Please provide as model inputs either a single array or a list of arrays. You passed: x=

Keras 生成器报错:Tensor object has no attrbute ‘assign‘_第2张图片

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

报错二:

RuntimeError: You must compile your model before using it.

Keras 生成器报错:Tensor object has no attrbute ‘assign‘_第3张图片

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

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

第三个报错:

Tensor object has no attrbute 'assign'

Keras 生成器报错:Tensor object has no attrbute ‘assign‘_第4张图片

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

修改为

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

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

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

上述修改完成后就可以训练了
Keras 生成器报错:Tensor object has no attrbute ‘assign‘_第5张图片

你可能感兴趣的:(Keras深度学习,tensorflow,深度学习)