训练GRU模型TypeError时出现此错误:*不支持的操作数类型:'int'和'NoneType'

艾哈迈德·穆罕默德·阿卜杜勒·艾哈迈德

使用Scikit进行机器学习动手学习Keras和TensorFlow 2nd Edition-2019中的代码

import tensorflow as tf
from tensorflow import keras

from __future__ import print_function
from keras.callbacks import LambdaCallback
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.optimizers import RMSprop
from keras.utils.data_utils import get_file
import numpy as np
import random
import sys
import io
import gzip
import urllib

shakespeare_url = "https://homl.info/shakespeare" # shortcut URL
filepath = keras.utils.get_file("shakespeare.txt", shakespeare_url)
with open(filepath) as f:
    shakespeare_text = f.read()

tokenizer = keras.preprocessing.text.Tokenizer(char_level=True)
tokenizer.fit_on_texts([shakespeare_text])

max_id = len(tokenizer.word_index) # number of distinct characters
dataset_size = tokenizer.document_count # total number of characters

[encoded] = np.array(tokenizer.texts_to_sequences([shakespeare_text])) - 1
train_size = dataset_size * 90 // 100
dataset = tf.data.Dataset.from_tensor_slices(encoded[:train_size])
n_steps = 100
window_length = n_steps + 1 # target = input shifted 1 character ahead
dataset = dataset.window(window_length, shift=1, drop_remainder=True)

dataset = dataset.flat_map(lambda window: window.batch(window_length))
batch_size = 32
dataset = dataset.shuffle(10000).batch(batch_size)
dataset = dataset.map(lambda windows: (windows[:, :-1], windows[:, 1:]))

dataset = dataset.map(
    lambda X_batch, Y_batch: (tf.one_hot(X_batch, depth=max_id), Y_batch))
dataset = dataset.prefetch(1)

model = keras.models.Sequential([
    keras.layers.GRU(128, return_sequences=True, input_shape=[None, max_id],
                     dropout=0.2, recurrent_dropout=0.2),
    keras.layers.GRU(128, return_sequences=True,
                     dropout=0.2, recurrent_dropout=0.2),
    keras.layers.TimeDistributed(keras.layers.Dense(max_id, 
                                                    activation="softmax"))
])
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam")

history = model.fit(dataset, epochs=20)

当执行历史记录= model.fit(dataset,epochs = 20)时,它给我1 / Unknown-3s 3s / step和错误TypeError:*:'int'和'NoneType'不受支持的操作数类型

Tensorflow战士

我已重现了您的错误,该错误不是与数据或任何程序包有关,而是与您尝试使用标记符适合数据的方式有关tokenizer.fit_on_texts()
由于您已将数据形成为字符串,因此需要直接使用字符串数据而不是列表中的数据。

我已经修改了您的代码,它正在正常运行。

import tensorflow as tf
from tensorflow import keras

from __future__ import print_function
from keras.callbacks import LambdaCallback
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.optimizers import RMSprop
from keras.utils.data_utils import get_file
import numpy as np
import random
import sys
import io
import gzip
import urllib 

shakespeare_url = "https://homl.info/shakespeare" # shortcut URL
filepath = keras.utils.get_file("shakespeare.txt", shakespeare_url)
with open(filepath) as f:
    shakespeare_text = f.read() 


tokenizer = keras.preprocessing.text.Tokenizer(char_level=True)
#tokenizer.fit_on_texts(shakespeare_text) old line with text input as a list.
tokenizer.fit_on_texts(shakespeare_text)



max_id = len(tokenizer.word_index) # number of distinct characters
dataset_size = tokenizer.document_count # total number of characters

[encoded] = np.array(tokenizer.texts_to_sequences([shakespeare_text])) - 1
train_size = dataset_size * 90 // 100
dataset = tf.data.Dataset.from_tensor_slices(encoded[:train_size])
n_steps = 100
window_length = n_steps + 1 # target = input shifted 1 character ahead
dataset = dataset.window(window_length, shift=1, drop_remainder=True)

dataset = dataset.flat_map(lambda window: window.batch(window_length))
batch_size = 32
dataset = dataset.shuffle(10000).batch(batch_size)
dataset = dataset.map(lambda windows: (windows[:, :-1], windows[:, 1:]))

dataset = dataset.map(
    lambda X_batch, Y_batch: (tf.one_hot(X_batch, depth=max_id), Y_batch))
dataset = dataset.prefetch(1) 


model = keras.models.Sequential([
    keras.layers.GRU(128, return_sequences=True, input_shape=[None, max_id],
                     dropout=0.2, recurrent_dropout=0.2),
    keras.layers.GRU(128, return_sequences=True,
                     dropout=0.2, recurrent_dropout=0.2),
    keras.layers.TimeDistributed(keras.layers.Dense(max_id, 
                                                    activation="softmax"))
])
model.compile(loss="sparse_categorical_crossentropy", optimizer="adam")

history = model.fit(dataset,steps_per_epoch=train_size // batch_size, epochs=20)  

考虑到时间消耗,由于数据量很大,因此我无法在此处提供输出。

正在进行的培训:

Epoch 1/20
  138/31370 [..............................] - ETA: 3:47:54 - loss: 2.8267

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TypeError:+时不支持的操作数类型:求和列表时为“ int”和“ NoneType”

递归阶乘报告错误`TypeError:*不支持的操作数类型:'int'和'NoneType'`

TypeError:打印时%不支持的操作数类型:'NoneType'和'int'

类型错误:* 不支持的操作数类型:'int' 和 'NoneType'

Keras报告TypeError:+不支持的操作数类型:'NoneType'和'int'

TensorFlow 1.x:TypeError:/:不支持的操作数类型:'NoneType'和'int'

TypeError:%不支持的操作数类型:“ NoneType”和“ int”

Python:TypeError:+不支持的操作数类型:“ NoneType”和“ int”

TypeError:+不支持的操作数类型:“ NoneType”和“ int”

TypeError: 不支持的操作数类型 +: 'NoneType' 和 'int' 在 while 循环中

如何修复,TypeError:% 不支持的操作数类型:'NoneType' 和 'int'

试图解决“TypeError:+ 不支持的操作数类型:“NoneType”和“int”

蟒蛇 | TypeError: 不支持的操作数类型 /: 'NoneType' 和 'int' |使用变量来划分

Python错误:+不支持的操作数类型:“ int”和“ NoneType”

处理Bagging方法时,如何解决TypeError:+不支持的操作数类型:“ int”和“ NoneType”

TypeError: 不支持的操作数类型 *: 'float' 和 'NoneType' 在构建 pyomo 模型时

出现错误“TypeError:% 不支持的操作数类型:‘NoneType’和‘str’”

+不支持的操作数类型:'NoneType'和'str'和'int'

类型错误:不支持 / 的操作数类型:'NoneType' 和 'int',对于extract_image_patches

类型错误:不支持 + 的操作数类型:最后一行中的“int”和“NoneType”

*:Python 3中不支持*:'NoneType'和'int'的操作数类型

* 不支持的操作数类型:“NoneType”和“NoneType”

使用keras EarlyStopping时,如何防止TypeError:-:'NoneType'和'int'不受支持的操作数类型?

trip_cost('Pittsburgh',5)引发了一个错误:+不支持的操作数类型:'int'和'NoneType'

python函数处理给出错误TypeError:不支持的操作数类型-:'NoneType'和'NoneType'

代码错误 Python:TypeError: 不支持 / 的操作数类型:'set' 和 'int'

TypeError: 不支持的操作数类型 /: 'int' 和 'str' 制作网格时

TypeError:+不支持的操作数类型:使用discord.py从API提取数据时出现“ int”和“ str”错误

类型错误:不支持 + 的操作数类型:'NoneType' 和 'str'/基本转换