[英]how to solve Value Error in tensorflow.keras?
我有一些关于韩国 NLP 的项目。 我的项目的目的是按三类(无、攻击性、仇恨)对句子进行分类。 输入数据填充了 45 长度。 所以我创建了简单的 DL 模型并将预处理数据输入到模型中。 我想创建DL模型来对curved_sentence进行分类
所以我使用 tensorflow-cpu 的 keras(版本:2.5.0 / python 版本 = 3.7.9)。 我在使用 keras 时遇到了一些问题。 我使用 Keras 创建了非常简单的 LSTM 模型。 我创建了嵌入层。 嵌入层的 input_dim 为 vocab_size + 1(vocab_size 为 24844)并创建了 LSTM 层和使用 softmax 作为激活函数的最终层
但我检查了发生的“ValueError: Shapes (None, 3) and (None, 1) is incompatible.” 我提交了一些代码和错误消息。 我无法理解为什么会发生此错误以及发生了哪部分错误
import pickle
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
METRICS = [
keras.metrics.TruePositives(name='tp'),
keras.metrics.FalsePositives(name='fp'),
keras.metrics.TrueNegatives(name='tn'),
keras.metrics.FalseNegatives(name='fn'),
keras.metrics.BinaryAccuracy(name='accuracy'),
keras.metrics.Precision(name='precision'),
keras.metrics.Recall(name='recall'),
keras.metrics.AUC(name='auc')
]
model = keras.Sequential()
model.add(layers.Embedding(len(tk.word_index)+1, 100, input_length=45))
model.add(layers.LSTM(100))
model.add(layers.Dense(3, activation='softmax'))
model.summary()
early_stopping = keras.callbacks.EarlyStopping(
monitor = 'val_auc',
verbose = 1,
patience = 10,
mode = 'max',
restore_best_weights=True)
model.compile(optimizer=keras.optimizers.RMSprop(), loss='sparse_categorical_crossentropy', metrics=METRICS)
baseline_history = model.fit(train_data, train_label, batch_size = 8192, epochs = 100, callbacks = [early_stopping], validation_split = 0.2, class_weight = class_weight)
以下内容是创建简单模型的摘要
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 45, 100) 2484500
_________________________________________________________________
lstm (LSTM) (None, 100) 80400
_________________________________________________________________
dense (Dense) (None, 3) 303
=================================================================
Total params: 2,565,203
Trainable params: 2,565,203
Non-trainable params: 0
和下面的内容出现错误信息
Traceback (most recent call last):
File "learning.py", line 85, in <module>
baseline_history = model.fit(train_data, train_label, batch_size = 8192, epochs = 100, callbacks = [early_stopping], validation_split = 0.2, class_weight = class_weight)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1183, in fit
tmp_logs = self.train_function(iterator)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py", line 889, in __call__
result = self._call(*args, **kwds)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py", line 933, in _call
self._initialize(args, kwds, add_initializers_to=initializers)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py", line 764, in _initialize
*args, **kwds))
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 3050, in _get_concrete_function_internal_garbage_collected
graph_function, _ = self._maybe_define_function(args, kwargs)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 3444, in _maybe_define_function
graph_function = self._create_graph_function(args, kwargs)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\function.py", line 3289, in _create_graph_function
capture_by_value=self._capture_by_value),
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\func_graph.py", line 999, in func_graph_from_py_func
func_outputs = python_func(*func_args, **func_kwargs)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\eager\def_function.py", line 672, in wrapped_fn
out = weak_wrapped_fn().__wrapped__(*args, **kwds)
File "C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in wrapper
raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py:855 train_function *
return step_function(self, iterator)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py:845 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1285 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2833 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3608 _call_for_each_replica
return fn(*args, **kwargs)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py:838 run_step **
outputs = model.train_step(data)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py:800 train_step
self.compiled_metrics.update_state(y, y_pred, sample_weight)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:460 update_state
metric_obj.update_state(y_t, y_p, sample_weight=mask)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\utils\metrics_utils.py:86 decorated
update_op = update_state_fn(*args, **kwargs)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\metrics.py:177 update_state_fn
return ag_update_state(*args, **kwargs)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\metrics.py:1005 update_state **
sample_weight=sample_weight)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\utils\metrics_utils.py:366 update_confusion_matrix_variables
y_pred.shape.assert_is_compatible_with(y_true.shape)
C:\Users\pllab\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1161 assert_is_compatible_with
raise ValueError("Shapes %s and %s are incompatible" % (self, other))
ValueError: Shapes (None, 3) and (None, 1) are incompatible
我试图解决这个问题,但我找不到合适的答案。 对不起我的英语,请给我一些关于这个错误的建议。
我不是很喜欢机器学习,但尝试改变
model.add(layers.Dense(3, activation='softmax'))
到
model.add(layers.Dense(1, activation='softmax'))
并查看错误是否仍然发生
编辑:或检查 train_label 的元素。 我认为它应该有 3 个标签值(因为你的最后一层有 3 个输出)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.