我的方法我认为它的问题是
history = model.fit_generator(train_generator, epochs=epochs, steps_per_epoch=train_steps, verbose=1, callbacks=[checkpoint], validation_data=val_generator, validation_steps=val_steps)
def data_generator(descriptions, photos, tokenizer, max_length, imgsIds, vocab_size):
while 1:
for ind in range(len(imgsIds)):
photo = photos[ind]
key = imgsIds[ind]
desc_list = descriptions[str(key)]
in_img, in_seq, out_word = create_sequences(
tokenizer, max_length, desc_list, photo, vocab_size)
yield [in_img, in_seq], out_word
我得到
Failed to convert a NumPy array to a Tensor (Unsupported object type dict).
如果有什么我应该补充的,请评论。。谢谢
Traceback (most recent call last):
File "fit.py", line 271, in <module>
main(sys.argv)
File "fit.py", line 268, in main
fit_model(train, train_descriptions, train_rnn_input, val, val_descriptions, val_rnn_input)
File "fit.py", line 255, in fit_model
history = model.fit_generator(train_generator, epochs=epochs, steps_per_epoch=train_steps, verbose=1, callbacks=[checkpoint], validation_data=val_generator, validation_steps=val_steps)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 324, in new_func
return func(*args, **kwargs)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1479, in fit_generator
initial_epoch=initial_epoch)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
return method(self, *args, **kwargs)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 872, in fit
return_dict=True)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
return method(self, *args, **kwargs)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1057, in evaluate
model=self)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1112, in __init__
model=model)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 775, in __init__
peek = _process_tensorlike(peek)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1013, in _process_tensorlike
inputs = nest.map_structure(_convert_numpy_and_scipy, inputs)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 617, in map_structure
structure[0], [func(*x) for x in entries],
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 617, in <listcomp>
structure[0], [func(*x) for x in entries],
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/data_adapter.py", line 1008, in _convert_numpy_and_scipy
return ops.convert_to_tensor(x, dtype=dtype)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1341, in convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/framework/tensor_conversion_registry.py", line 52, in _default_conversion_function
return constant_op.constant(value, dtype, name=name)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 262, in constant
allow_broadcast=True)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 270, in _constant_impl
t = convert_to_eager_tensor(value, ctx, dtype)
File "/path/.local/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 96, in convert_to_eager_tensor
return ops.EagerTensor(value, ctx.device_name, dtype)
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type dict).
2021-06-27 04:46:22.936001: W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated.
[[{{node PyFunc}}]]
编辑
def create_sequences(tokenizer, max_length, desc_list, photo, vocab_size):
X1, X2, y = list(), list(), list()
for desc in desc_list:
seq = tokenizer.texts_to_sequences([desc])[0]
for i in range(1, len(seq)):
in_seq, out_seq = seq[:i], seq[i]
in_seq = pad_sequences([in_seq], maxlen=max_length)[0]
out_seq = to_categorical([out_seq], num_classes=vocab_size)[0]
X1.append(np.array(photo).astype(np.float32))
X2.append(np.array(in_seq).astype(np.float32))
y.append(np.array(out_seq).astype(np.float32))
return array(X1), array(X2), array(y)
此错误表示数据中的某些值或所有值没有要转换的有效数据类型。
原因:
此错误的常见原因是数组的值在图形模式下不是给定的数据类型。这可能是因为某些值是
NaN
或None
,或者所有值的格式都不支持转换为张量,例如python字典解决方案:
这个问题可以通过将数据转换为预期的数据类型来解决,例如,在输入到模型之前对输入数据应用} 的方法替换它们
x=np.asarray(x).astype(np.float32)
等方法。它还支持NaN值问题。请注意,最好对无数据值进行一些预处理,并用类似^{但在数据类型不受支持的情况下(如python字典),您无法使用上述方法解决问题。您应该更改数据结构,然后将其提供给模型。注意,即使是
np.asarray
也不能改变结构。您可能会得到数据numpy数组的类型,但结构保持不变,无法由网络处理。因此,不要将该类型作为未被记录的证据。以下是一些示例:您的场景:
正如代码所反映的,您将数据转换为numpy数组和float。所以,即使没有变量,也不会出现错误。因此,正如错误所反映的(
Unsupported object type dict
),您的一个输入变量([in_img, in_seq], out_word
)是一个字典。根据您的代码,in_seq
和out_seq
是列表。因此,应该是从photo
变量启动的in_img
。所以,检查这个变量数据。它很可能保存一个类似字典的数据。不要注意类型(print(type(photo))
),因为正如我上面的代码所示,它可能是一个numpy.ndarray
,但包含一个字典数据相关问题 更多 >
编程相关推荐