`class_weight` not supported for 3+ dimensional targets

Dear everyone:

I’m new to tensorflow. The coding as follows:

def train_model(self):
checkpoint = ModelCheckpoint(self.PATH, monitor=‘val_loss’, verbose=1, save_best_only=True, mode=‘auto’)
if self.modality == “audio”:
model = self.get_audio_model()
model.compile(optimizer=‘adadelta’, loss=‘categorical_crossentropy’, sample_weight_mode=‘temporal’)
elif self.modality == “text”:
model = self.get_text_model()
model.compile(optimizer=‘adadelta’, loss=‘categorical_crossentropy’, sample_weight_mode=‘temporal’)
elif self.modality == “bimodal”:
model = self.get_bimodal_model()
model.compile(optimizer=‘adam’, loss=‘categorical_crossentropy’, sample_weight_mode=‘temporal’)
early_stopping = EarlyStopping(monitor=‘val_loss’, patience=10)
model.fit(self.train_x, self.train_y,
epochs=self.epochs,
batch_size=self.batch_size,
sample_weight=self.train_mask,
class_weight = {0:4.0, 1:15.0, 2:15.0, 3:3.0, 4:1.0, 5:6.0, 6:3.0},
shuffle=True,
callbacks=[early_stopping, checkpoint],
validation_data=(self.val_x, self.val_y, self.val_mask))
self.test_model()

To be honest, the class_weight = {0:4.0, 1:15.0, 2:15.0, 3:3.0, 4:1.0, 5:6.0, 6:3.0} was added by myself to adjust the class weight. However, it reported the error : ValueError: class_weight not supported for 3+ dimensional targets.

The full of error as follows:
ValueError Traceback (most recent call last)
~\baseline.py in
288 model.test_model()
289 else:
→ 290 model.train_model()

~\baseline.py in train_model(self)
219
220 early_stopping = EarlyStopping(monitor=‘val_loss’, patience=10)
→ 221 model.fit(self.train_x, self.train_y,
222 epochs=self.epochs,
223 batch_size=self.batch_size,

F:\Anaconda\lib\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)
1106 training_utils.RespectCompiledTrainableState(self):
1107 # Creates a tf.data.Dataset and handles batch and epoch iteration.
→ 1108 data_handler = data_adapter.get_data_handler(
1109 x=x,
1110 y=y,

F:\Anaconda\lib\site-packages\keras\engine\data_adapter.py in get_data_handler(*args, **kwargs)
1346 if getattr(kwargs[“model”], “_cluster_coordinator”, None):
1347 return _ClusterCoordinatorDataHandler(*args, **kwargs)
→ 1348 return DataHandler(*args, **kwargs)
1349
1350

F:\Anaconda\lib\site-packages\keras\engine\data_adapter.py in init(self, x, y, sample_weight, batch_size, steps_per_epoch, initial_epoch, epochs, shuffle, class_weight, max_queue_size, workers, use_multiprocessing, model, steps_per_execution, distribute)
1156 self._insufficient_data = False
1157
→ 1158 self._configure_dataset_and_inferred_steps(strategy, x, steps_per_epoch,
1159 class_weight, distribute)
1160

F:\Anaconda\lib\site-packages\keras\engine\data_adapter.py in _configure_dataset_and_inferred_steps(failed resolving arguments)
1168 dataset = self._adapter.get_dataset()
1169 if class_weight:
→ 1170 dataset = dataset.map(_make_class_weight_map_fn(class_weight))
1171 self._inferred_steps = self._infer_steps(steps_per_epoch, dataset)
1172

F:\Anaconda\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py in map(self, map_func, num_parallel_calls, deterministic)
1923 warnings.warn("The deterministic argument has no effect unless the "
1924 “num_parallel_calls argument is specified.”)
→ 1925 return MapDataset(self, map_func, preserve_cardinality=True)
1926 else:
1927 return ParallelMapDataset(

F:\Anaconda\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py in init(self, input_dataset, map_func, use_inter_op_parallelism, preserve_cardinality, use_legacy_function)
4481 self._use_inter_op_parallelism = use_inter_op_parallelism
4482 self._preserve_cardinality = preserve_cardinality
→ 4483 self._map_func = StructuredFunctionWrapper(
4484 map_func,
4485 self._transformation_name(),

F:\Anaconda\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py in init(self, func, transformation_name, dataset, input_classes, input_shapes, input_types, input_structure, add_to_graph, use_legacy_function, defun_kwargs)
3710 resource_tracker = tracking.ResourceTracker()
3711 with tracking.resource_tracker_scope(resource_tracker):
→ 3712 self._function = fn_factory()
3713 # There is no graph to add in eager mode.
3714 add_to_graph &= not context.executing_eagerly()

F:\Anaconda\lib\site-packages\tensorflow\python\eager\function.py in get_concrete_function(self, *args, **kwargs)
3132 or tf.Tensor or tf.TensorSpec.
3133 “”"
→ 3134 graph_function = self._get_concrete_function_garbage_collected(
3135 *args, **kwargs)
3136 graph_function._garbage_collector.release() # pylint: disable=protected-access

F:\Anaconda\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_garbage_collected(self, *args, **kwargs)
3098 args, kwargs = None, None
3099 with self._lock:
→ 3100 graph_function, _ = self._maybe_define_function(args, kwargs)
3101 seen_names = set()
3102 captured = object_identity.ObjectIdentitySet(

F:\Anaconda\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs)
3442
3443 self._function_cache.missed.add(call_context_key)
→ 3444 graph_function = self._create_graph_function(args, kwargs)
3445 self._function_cache.primary[cache_key] = graph_function
3446

F:\Anaconda\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
3277 arg_names = base_arg_names + missing_arg_names
3278 graph_function = ConcreteFunction(
→ 3279 func_graph_module.func_graph_from_py_func(
3280 self._name,
3281 self._python_function,

F:\Anaconda\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
997 _, original_func = tf_decorator.unwrap(python_func)
998
→ 999 func_outputs = python_func(*func_args, **func_kwargs)
1000
1001 # invariant: func_outputs contains only Tensors, CompositeTensors,

F:\Anaconda\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py in wrapped_fn(*args)
3685 attributes=defun_kwargs)
3686 def wrapped_fn(*args): # pylint: disable=missing-docstring
→ 3687 ret = wrapper_helper(*args)
3688 ret = structure.to_tensor_list(self._output_structure, ret)
3689 return [ops.convert_to_tensor(t) for t in ret]

F:\Anaconda\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py in wrapper_helper(*args)
3615 if not _should_unpack(nested_args):
3616 nested_args = (nested_args,)
→ 3617 ret = autograph.tf_convert(self._func, ag_ctx)(*nested_args)
3618 if _should_pack(ret):
3619 ret = tuple(ret)

F:\Anaconda\lib\site-packages\tensorflow\python\autograph\impl\api.py in wrapper(*args, **kwargs)
693 except Exception as e: # pylint:disable=broad-except
694 if hasattr(e, ‘ag_error_metadata’):
→ 695 raise e.ag_error_metadata.to_exception(e)
696 else:
697 raise

ValueError: in user code:

F:\Anaconda\lib\site-packages\keras\engine\data_adapter.py:1385 _class_weights_map_fn  *
    raise ValueError("`class_weight` not supported for "

ValueError: `class_weight` not supported for 3+ dimensional targets.

How to fix it? Thanks
Best wishes.
jiachen

1 Like

The long story is

/cc @Sayak_Paul @markdaoust

1 Like

I tried to follow the tutorial, but it still reported an error as follows: ValueError: class_weight not supported for 3+ dimensional targets.

the coding: class_weight={0: 4, 1: 15, 2: 15, 3: 3, 4: 1, 5: 6, 6: 3},the error is ValueError: class_weight not supported for 3+ dimensional targets.

def train_model(self):

	checkpoint = ModelCheckpoint(self.PATH, monitor='val_loss', verbose=1, save_best_only=True, mode='auto')

	if self.modality == "audio":
		model = self.get_audio_model()
		model.compile(optimizer='adadelta', loss='categorical_crossentropy', sample_weight_mode='temporal')
	elif self.modality == "text":
		model = self.get_text_model()
		model.compile(optimizer='adadelta', loss='categorical_crossentropy', sample_weight_mode='temporal')
	elif self.modality == "bimodal":
		model = self.get_bimodal_model()
		model.compile(optimizer='adam', loss='categorical_crossentropy', sample_weight_mode='temporal')

	early_stopping = EarlyStopping(monitor='val_loss', patience=10)
	model.fit(self.train_x, self.train_y,
	                epochs=self.epochs,
	                batch_size=self.batch_size,
	                sample_weight=self.train_mask,
	                shuffle=True, 
	                class_weight=class_weight,
	                callbacks=[early_stopping, checkpoint],
	                validation_data=(self.val_x, self.val_y, self.val_mask))

	self.test_model()
1 Like