AttributeError: 'DataLoader' object has no attribute 'train_data'
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(100, activation=tf.nn.relu),
tf.keras.layers.Dense(10),
tf.keras.layers.Softmax()
])
inputs = tf.keras.Input(shape=(28, 28, 1))
x = tf.keras.layers.Flatten()(inputs)
x = tf.keras.layers.Dense(units=100, activation=tf.nn.relu)(x)
x = tf.keras.layers.Dense(units=10)(x)
outputs = tf.keras.layers.Softmax()(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=[tf.keras.metrics.sparse_categorical_accuracy]
)
class DataLoader():
def __init__(self):
path = tf.keras.utils.get_file('nietzsche.txt',
origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt')
with open(path, encoding='utf-8') as f:
self.raw_text = f.read().lower()
self.chars = sorted(list(set(self.raw_text)))
self.char_indices = dict((c, i) for i, c in enumerate(self.chars))
self.indices_char = dict((i, c) for i, c in enumerate(self.chars))
self.text = [self.char_indices[c] for c in self.raw_text]
def get_batch(self, seq_length, batch_size):
seq = []
next_char = []
for i in range(batch_size):
index = np.random.randint(0, len(self.text) - seq_length)
seq.append(self.text[index:index+seq_length])
next_char.append(self.text[index+seq_length])
return np.array(seq), np.array(next_char) # [batch_size, seq_length], [num_batch]
data_loader = DataLoader()
model.fit(data_loader.train_data, data_loader.train_label, epochs=num_epochs, batch_size=batch_size)
AttributeError Traceback (most recent call last)
Input In [11], in
1 data_loader = DataLoader()
----> 2 model.fit(data_loader.train_data, data_loader.train_label, epochs=num_epochs, batch_size=batch_size)
AttributeError: 'DataLoader' object has no attribute 'train_data'
求解决方法
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
这个错误是因为在 DataLoader 类中并未定义 "train_data" 和 "train_label" 这两个属性,导致代码执行到 "model.fit" 这一行时,抛出 AttributeError 异常。
要解决这个错误,可以在 DataLoader 类中添加 "train_data" 和 "train_label" 两个属性,并且在训练模型时通过这两个属性传入相应的数据。
消除 ChatGPT暴政,世界属于非机器人!
`
这个错误 确实是 DataLoader 类中并未定义 "train_data" 和 "train_label" 这两个属性造成的
你应该通过传递给DataLoader的数据集来访问数据。下面是一个示例你可以看一下:
train_dataset = ... # 你的 dataset
train_dataloader = DataLoader(train_dataset, batch_size=32, shuffle=True)
for i, data in enumerate(train_dataloader):
inputs, labels = data
# 这里使用你的 inputs 和 labels.
在上面这个例子中,train_dataset是传递给DataLoader的训练数据集,
train_dataloader是DataLoader对象。
for循环迭代由DataLoader生成的批次数据,
inputs和labels变量包含当前批次的数据。
基本这么操作才可以。人类不能输!
你这都是从哪抄的代码,感觉少抄了一半
train_data这东西没定义,你是怎么点出来的,不是点出来的那就应该是复制粘贴上去的吧
这个错误通常出现在调用一个 DataLoader 对象的 train_data 属性时,但实际上 DataLoader 类并没有定义 train_data 属性。
通常情况下,train_data 属性是用于表示训练数据集的属性。如果你的代码中使用了 train_data 属性,你需要检查代码中是否存在以下问题:
变量名错误:检查代码中变量名是否拼写正确,特别是检查是否将变量名写成了 train_data,而实际上应该是 train_dataset 或者其他类似的名称。
数据加载错误:如果你的代码中使用的是 PyTorch 中的 DataLoader 对象,那么 DataLoader 并没有 train_data 属性,而是通过 dataset 属性来加载数据集。因此,检查代码中是否正确设置了 dataset 属性。
数据集加载错误:如果你使用的是自定义的数据集加载方法,那么你需要检查自定义的数据集加载方法是否正确。特别是,检查是否正确加载了训练数据集,并且是否将其保存到了 train_data 属性中。
如果以上问题都没有找到,可以尝试重新审视代码,找出可能存在的其他问题。