无法获得喀拉拉邦的预期目标形状

时间:2019-09-09 18:17:35

标签: keras attention-model

我是顺序模型的新手。我正在使用Keras中的注意力模型开发图像标题生成器。

我在Keras的预期目标形状中始终遇到错误。我以前从事过基本模型的研究。对于这种错误,通常我处理数据集的方式存在错误。 但是,在这种情况下,我尝试通过解压缩“ y”数组的形状或尝试压缩“输出”列表来调整其形状。但这不会更改错误消息。

def model(photo_shape, max_len, n_s, vocab_size):
  outputs=list()
  seq=Input(shape=(max_len,), name='inseq')#max_len is 33.
  x = Embedding(vocab_size, 300,mask_zero=True)(seq)  

  p=Input(shape=(photo_shape[0],photo_shape[1]),name='picture')
  s,_,c=LSTM(n_s,return_state = True)(p)
  for t in range(max_len):
    context = attention(p,s)
    word=Lambda(lambda x: x[:,t,:])(x)
    context = concat([word,context])
    context=reshape(context)
    s,_,c = lstm(context)
    out = den2(s) #return a dense layer with vocab_size units(none, 2791).
    outputs.append(out)
    #print(np.array(outputs).shape) => returns (33,)
  model = Model(inputs=[seq,p],outputs=outputs)
  return model

#the following method goes to a generator function.
def build_sequences(tokenizer, max_length, desc_list, photo):
  X1, X2, y = list(), list(), list()
  desc = desc_list[0]
  seq = tokenizer.texts_to_sequences([desc])[0]
  l=len(seq)
  in_seq, out_seq = seq[:l-1], seq[1:l]
  in_seq = pad_sequences([in_seq],padding='post', maxlen=max_length)[0]
  out_seq =[to_categorical([w], num_classes=vocab_size)[0] for w in out_seq]
  out_seq = pad_sequences([out_seq],padding='post', maxlen=max_length)[0]
  X1.append(in_seq)
  X2.append(photo)
  y.append(out_seq)
  return np.array(X1), np.array(X2), np.array(y)

我得到的错误是这个。

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 33 array(s), but instead got the following list of 1 arrays: [array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0,...

调试消息为我的输入和输出显示以下形状。

in_seq: (1, 33)
photo: (1, 196, 512)
out_seq: (1, 33, 2971)

第一个是批处理大小,不应将其考虑在内。所以,我不知道为什么33对喀拉拉邦人不可见。我尝试过修改此形状。但是从逻辑上讲,这应该行不通吗?

请告诉我这是数据处理错误还是我的模型结构有问题!

让我知道是否需要更多代码

0 个答案:

没有答案