ValueError: `sequences` 在 Keras 中必须是可迭代的

Posted

技术标签:

【中文标题】ValueError: `sequences` 在 Keras 中必须是可迭代的【英文标题】:ValueError: `sequences` must be iterable in Keras 【发布时间】:2019-11-08 17:47:02 【问题描述】:

我正在尝试建立一个情绪分析模型,但是当我开始训练时,我收到了ValueError: sequences must be iterable. 的错误

pad_sequences 是导致错误的原因。

编码直到包含pad_sequences的函数:

1)获取单词列表,去掉所有标点符号并将所有单词标记转换为小写:

 def get_processed_tokens(text):
    filtered_text = re.sub(r'[^a-zA-Z0-9\s]', '', text)
    filtered_text = filtered_text.split()
    filtered_text = [token.lower() for token in filtered_text]
    return filtered_text

2) 创建 token_idx 字典,将标记映射到整数以创建嵌入并过滤掉低于阈值(在训练集中给出为 5)出现的嵌入。

def tokenize_text(data_text, min_frequency =5):
    review_tokens = [get_processed_tokens(review) for review in data_text]
    token_list = [token for review in review_tokens  for token in review] 
    token_freq_dict = token:token_list.count(token) for token in set(token_list)
    most_freq_tokens = [tokens for tokens in token_freq_dict if token_freq_dict[tokens] >= min_frequency]
    idx = range(len(most_freq_tokens))
    token_idx = dict(zip(most_freq_tokens, idx))
    return token_idx,len(most_freq_tokens)

3) 创建将输入模型的序列以学习嵌入,数据集中每个评论的 (max_tokens) 的固定长度序列。如果序列小于最大长度,则用零预填充序列。

def create_sequences(data_text,token_idx,max_tokens):
    review_tokens  = [get_processed_tokens(review) for review in data_text] 
    review_token_idx = map( lambda review: [token_idx[k] for k in review if k in token_idx.keys() ], review_tokens)    
    padded_sequences = pad_sequences(review_token_idx, maxlen=max_tokens)  ##this line gives error
    return np.array(padded_sequences)

【问题讨论】:

【参考方案1】:

pad_sequences 函数expects 给定的序列对象具有__len__ 属性(即,它基本上给出了序列的数量)。 review_token_idx 是一个 map 对象,它没有 __len__ 属性。因此,您需要将其转换为对象,例如一个list,有这样一个属性:

padded_sequences = pad_sequences(list(review_token_idx), maxlen=max_tokens)

【讨论】:

以上是关于ValueError: `sequences` 在 Keras 中必须是可迭代的的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: need at most 63 handles, got a sequence of length 65

sklearn SVM fit() "ValueError: setting an array element with a sequence"

k_mean.fit 返回 ValueError: setting an array element with a sequence

SSD报错:ValueError: setting an array element with a sequence. (已解决)

ValueError:无法重塑大小为 0 的数组

format函数报错:ValueError: dictionary update sequence element #0 has length 1; 2 is required,str转dict(代码