AttributeError:“顺序”对象没有属性“输出名称”。不是toco问题
Posted
技术标签:
【中文标题】AttributeError:“顺序”对象没有属性“输出名称”。不是toco问题【英文标题】:AttributeError: 'Sequential' object has no attribute 'output_names'. Not toco problem 【发布时间】:2019-05-24 07:48:11 【问题描述】:我做错了什么?
https://repl.it/@zbitname/outputnamesproblem
import tensorflow as tf
import numpy as np
def random_generator():
while True:
yield ("input_1": np.random.randint(1, 10000), "input_2": np.random.randint(1, 10000), "output": np.random.randint(0, 1))
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(16, activation=tf.nn.tanh))
model.add(tf.keras.layers.Dense(4, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid))
model.build((1000, 2))
categories_train = random_generator()
model.compile(
optimizer='sgd',
loss='categorical_crossentropy',
metrics=['accuracy']
)
model.fit_generator(
generator=categories_train,
use_multiprocessing=True,
workers=6,
steps_per_epoch=10000
)
实际结果
操作系统:Windows 10
python.exe --版本 > Python 3.6.7 python.exe -c '将张量流导入为 tf;打印(tf.VERSION)' > 1.12.0 python.exe错误.py 回溯(最近一次通话最后): 文件“bug.py”,第 21 行,在 指标=['准确性'] _method_wrapper 中的文件“C:\Users\***\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\checkpointable\base.py”,第 474 行 方法(自我,*args,**kwargs) 编译中的文件“C:\Users\***\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\training.py”,第 600 行 skip_target_weighing_indices) _set_sample_weight_attributes 中的文件“C:\Users\***\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\training.py”,第 134 行 self.output_names、sample_weight_mode、skip_target_weighing_indices) AttributeError: 'Sequential' 对象没有属性 'output_names'操作系统:Ubuntu
$ cat /etc/lsb-release > DISTRIB_ID=Ubuntu > DISTRIB_RELEASE=16.04 > DISTRIB_CODENAME=xenial > DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" $ python3.6 --版本 > Python 3.6.8 $ python -c '将张量流导入为 tf;打印(tf.VERSION)' > 1.12.0 $ python3.6 bug.py 回溯(最近一次通话最后): 文件“bug.py”,第 21 行,在 指标=['准确性'] _method_wrapper 中的文件“/home/***/.local/lib/python3.6/site-packages/tensorflow/python/training/checkpointable/base.py”,第 474 行 方法(自我,*args,**kwargs) 编译中的文件“/home/***/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py”,第 600 行 skip_target_weighing_indices) _set_sample_weight_attributes 中的文件“/home/***/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py”,第 134 行 self.output_names、sample_weight_mode、skip_target_weighing_indices) AttributeError: 'Sequential' 对象没有属性 'output_names'
【问题讨论】:
【参考方案1】:将此与@Matias Valdenegro 的回答结合起来。您不能使用具有多个输入的 Sequential
模型。
问题是您正在传递带有名称的数据,这些名称没有为您的模型定义。
只需以正确的顺序传递数据(对于支持多个输出的模型)就足够了:
def random_generator():
while True:
yield ([np.random.randint(1, 10000), np.random.randint(1, 10000)],
np.random.randint(0, 1))
对于顺序模型,只有一个输入和一个输出是有效的:
yield np.random.randint(1, 10000), np.random.randint(0, 1)
【讨论】:
这不起作用,因为顺序模型不能有多个输入。 我将("input_1": np.random.randint(1, 10000), "input_2": np.random.randint(1, 10000), "output": np.random.randint(0, 1))
更改为 yield np.random.randint(1, 10000), np.random.randint(0, 1)
repl.it/@zbitname/outputnamesproblem 并得到了同样的错误...
问题可能出在model.build((1000, 2))
(对我来说没有意义)或using_multiprocessing=True
,这与yield generators不兼容,仅与keras.utils.Sequence
对象兼容。跨度>
我将model.build((1000, 2))
更改为model.build((1000, 1))
并得到了同样的错误......我删除了using_multiprocessing=True
的行并得到了同样的错误......为什么发生在我身上? :)
你为什么要调用model.build?这与我所知道的完全不同......【参考方案2】:
你有一个顺序模型,它只能有一个输入和一个输出,具有线性结构(顺序)。您的生成器为两个输入和一个输出生成数据。这当然是不兼容的,Keras 尝试从您的模型中获取输入/输出的名称,但顺序不支持多个输入或输出。
所以解决方案是使用函数式 API 制作一个合适的模型,或者重写您的生成器,使其具有一个没有名称的输入/输出。
【讨论】:
我更改了代码,现在有 1 个输入。错误是一样的。在 tensorflow 文档示例(Sequential.fit_generator)中有 2 个输入和 1 个输出。 tensorflow.org/api_docs/python/tf/keras/models/… @AlexKheben 您对代码做了哪些更改?此外,TF Keras 文档是错误的,Sequential 不支持多个输入/输出,而且您的模型也不支持。 我把("input_1": np.random.randint(1, 10000), "input_2": np.random.randint(1, 10000), "output": np.random.randint(0, 1))
改成了("input_1": np.random.randint(1, 10000), "output": np.random.randint(0, 1))
我了解 Sequential 不支持多个输入/输出,但我不明白如何编写正确的代码...以上是关于AttributeError:“顺序”对象没有属性“输出名称”。不是toco问题的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:“顺序”对象没有属性“输出名称”。不是toco问题
AttributeError:“顺序”对象在 Keras Theano 中没有属性“_feed_input_names”
AttributeError: 'RDD' 对象没有属性 'show'
AttributeError:“NumpyArrayIterator”对象没有属性“类”