【问题标题】:Facing error about OwnedIteror attribute error in TensorFlow在 TensorFlow 中面临有关 OwnedIteror 属性错误的错误
【发布时间】:2020-10-18 06:57:44
【问题描述】:

我在使用 TensorFlow 时遇到了关于数据生成器迭代器的问题。我想使用顺序模型,并从数据框创建了数据框数据生成器。现在我想训练顺序模型并将这个数据生成器作为输入应用到它,现在我面临属性错误

有什么办法可以解决这个错误。

这是我使用 Keras 的图像生成器的方法:

datagen = ImageDataGenerator()
data = datagen.flow_from_dataframe(
    dataframe=dataSet,
    directory=None,
    x_col="x_col",
    y_col='target',
    weight_col=None,
    target_size=(28, 28),
    color_mode="rgb",
    classes=None,
    class_mode="raw",
    batch_size=32,
    shuffle=True,
)

这是我的模型:

model = keras.models.Sequential()
model.add(keras.layers.Conv2D(28, (3,3), padding='same', input_shape=(32,32,3)))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Dense(2, activation='softmax'))

这是我编译模型的方式:

model.compile(optimizer='sgd', loss="categorical_crossentropy", metrics=["accuracy"])

我称这个模型为:

model.fit_generator(generator=data, epochs=10, verbose=1)

我的错误是:

AttributeError:在用户代码中:

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:576 _reset_compile_cache  *
    self._compiled_trainable_state = self._get_trainable_state()

AttributeError: 'OwnedIterator' object has no attribute '_get_trainable_state'

【问题讨论】:

  • 我的猜测是 data 不适合传递给 generator。但是我们看不到您是如何创建data 的,也看不到整个错误消息,因此无法判断。同时,您阅读过文档吗?
  • 如果您想查看数据,我可以编辑问题。还有生成器,这样你就可以看到我是如何创建数据生成器的。 @KarlKnechtel
  • @KarlKnechtel 我用数据生成器模型更新了问题。你能告诉我我做错了什么吗?而且是的,我现在指的是文档。
  • @yashChoksi - 你能解决上述错误吗?
  • 是的,我解决了这个错误。 @普拉奇

标签: python tensorflow machine-learning gpu data-science


【解决方案1】:

在尝试了这么多不同的图像数据管道后,我能够解决这个问题。有些出现属性错误,有些出现其他错误。

datagen = tf.keras.preprocessing.image.ImageDataGenerator()
data = datagen.flow_from_dataframe(
    #Simple dataframe name which contains columns which has path to your image      files and target column with values like 0,1 and many other case.
    dataframe=train,
    # If you gave absolute path in dataframe column then you can put here as None else give directory name and then file names will be accessed from dataframe.
    directory=None,
    # Column name with image names or full absolute paths
    x_col="image_name",
    # Column name with target variables
    y_col="target",
    weight_col=None,
    # If you want to resize your target image with specific size then put it here
    target_size=(32, 32),
    # If converting from rgb to grayscale put here.
    color_mode="rgb",
    classes=None,
    # If you have numpy 1D array of labels which is usually the case then use raw, there are many options given please check docs.
    class_mode="raw",
    batch_size=32,
    shuffle=True
)

现在转换此数据集后,您可以直接输入到 keras 模型中。

model = keras.models.Sequential()
# Make sure pixel size should remain the same.
model.add(keras.layers.Conv2D(28, (3,3), padding='same', input_shape=(32,32,3)))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Dense(1, activation='softmax'))

# Proper loss function is very important because categorical required multiple classes while the problem which I was facing has only 2 classes and it was coded as 0 and 1. So, use of proper loss function is creating different error, such as shape error. 
model.compile(optimizer='sgd', loss=keras.losses.BinaryCrossentropy(), metrics=["accuracy"])

model.fit_generator(generator=data, epochs=10, verbose=1)

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多