# \`class\_weight\` not supported for 3+ dimensional targets

**URL:** <https://discuss.ai.google.dev/t/class-weight-not-supported-for-3-dimensional-targets/32502>\
**Category:** General Discussion\
**Tags:** keras, api, help\_request\
**Created:** [June 8, 2021, 4:30pm UTC](https://discuss.ai.google.dev/t/class-weight-not-supported-for-3-dimensional-targets/32502 "2021-06-08T16:30:40Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![jiachen\_luo](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/jiachen_luo/32/7669_2.png) [@jiachen\_luo](https://discuss.ai.google.dev/u/jiachen_luo)\
**Post date:** [June 8, 2021, 4:30pm UTC](https://discuss.ai.google.dev/t/class-weight-not-supported-for-3-dimensional-targets/32502/1 "2021-06-08T16:30:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Bhack](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/bhack/32/6388_2.png) [@Bhack](https://discuss.ai.google.dev/u/Bhack)\
**Post date:** [June 8, 2021, 4:41pm UTC](https://discuss.ai.google.dev/t/class-weight-not-supported-for-3-dimensional-targets/32502/2 "2021-06-08T16:41:51Z")

</div>

The long story is

[https://github.com/tensorflow/tensorflow/issues/48714](https://github.com/tensorflow/tensorflow/issues/48714)

[https://github.com/keras-team/keras/issues/3653](https://github.com/keras-team/keras/issues/3653)

/cc @Sayak_Paul @markdaoust

---

<div class="post-metadata">

**Author:** ![jiachen\_luo](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/jiachen_luo/32/7669_2.png) [@jiachen\_luo](https://discuss.ai.google.dev/u/jiachen_luo)\
**Post date:** [June 13, 2021, 10:17am UTC](https://discuss.ai.google.dev/t/class-weight-not-supported-for-3-dimensional-targets/32502/3 "2021-06-13T10:17:33Z")

</div>

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):

```auto
	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()

```
