model.fit validation_set ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
Posted
技术标签:
【中文标题】model.fit validation_set ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()【英文标题】:model.fit validation_set ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() 【发布时间】:2021-11-28 19:53:03 【问题描述】:看起来 train.df 期望验证数据集使用不同类型的数据或结构,但我不知道该怎么做,因为这是我第一次使用在文件夹中包含所有图像的 dataset ,然后是 metadata.csv 和训练、测试和验证 .txts。 txt 列的格式为:
photo.png_string, diagnostic_number, xmin_number, xmax_number, ymin_number, ymax_number
数据帧显示为 dtype:int64
我正在从每个 .txt 中加载训练、测试和验证:
train_df = pd.read_csv('/location/.txt', sep=" ", header=None)
另外,边界框对我没有用,因为我想做一个没有分割的分类任务,所以我从每个 .txt 中删除 xmin、xmax、ymin 和 ymax
我正在尝试使用这个简单的模型作为开始的基础:
num_classes = 3
model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255),
tf.keras.layers.Conv2D(32, 3, activation='gelu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='gelu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='gelu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='gelu'),
tf.keras.layers.Dense(num_classes)
])
model.compile(
optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(
train_df,
validation_data=val_df,
epochs=25
)
当我尝试执行此单元格时,它会返回:
ValueError Traceback (most recent call last)
/tmp/ipykernel_9779/2327921962.py in <module>
19 metrics=['accuracy'])
20
---> 21 model.fit(
22 train_df,
23 validation_data=val_df,
/usr/lib/python3.9/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1121 (x, y, sample_weight), validation_split=validation_split))
1122
-> 1123 if validation_data:
1124 val_x, val_y, val_sample_weight = (
1125 data_adapter.unpack_x_y_sample_weight(validation_data))
/usr/lib/python3.9/site-packages/pandas/core/generic.py in __nonzero__(self)
1535 @final
1536 def __nonzero__(self):
-> 1537 raise ValueError(
1538 f"The truth value of a type(self).__name__ is ambiguous. "
1539 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
什么是理解我应该将数据转换为接受为输入的类型、张量或数组的正确方法?
谢谢!
【问题讨论】:
您模型的fit
函数不期望 validation_data
参数的 Pandas 数据框。 tensorflow.org/api_docs/python/tf/keras/Sequential#fit
【参考方案1】:
试试吧:
model.fit(train_df.values,
validation_data=val_df.values,
epochs=25)
【讨论】:
以上是关于model.fit validation_set ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()的主要内容,如果未能解决你的问题,请参考以下文章
model.predict() 和 model.fit() 做啥?
keras.models.Model.fit 中的“时代”是啥?
同时运行 model.fit() 和 TensorBoard?