InvalidArgumentError:Error at the time of fit model
InvalidArgumentError:Error at the time of fit model
我正在使用 多层感知器 和 keras 进行疾病分类,下面是过程描述,
将数据集拆分为train_x、train_y、test_x、test_y:
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
images,y = shuffle(images, y,random_state=1)
train_x, test_x, train_y, test_y = train_test_split(images, y, test_size=0.10, random_state = 415)
使用tensorflow nad kears开发顺序模型
import keras
import tensorflow as tf
model = keras.Sequential([keras.layers.Flatten(input_shape=(300,300,3)),
keras.layers.Dense(256, activation=tf.nn.tanh),
keras.layers.Dense(3, activation=tf.nn.softmax)
])
编译模型
model.compile(optimizer=tf.optimizers.Adam(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
** 用 30 个时期训练模型**
model.fit(train_x,train_y, epochs=30) #I faced the error here
以下错误,请关注帮助我:
Epoch 1/30
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-32-7830734727c4> in <module>
1 # Train the model with 30 epochs
----> 2 model.fit(train_x,train_y, epochs=30)
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
64 def _method_wrapper(self, *args, **kwargs):
65 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
---> 66 return method(self, *args, **kwargs)
67
68 # Running inside `run_distribute_coordinator` already.
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/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)
846 batch_size=batch_size):
847 callbacks.on_train_batch_begin(step)
--> 848 tmp_logs = train_function(iterator)
849 # Catch OutOfRangeError for Datasets of unknown size.
850 # This blocks until the batch has finished executing.
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)
578 xla_context.Exit()
579 else:
--> 580 result = self._call(*args, **kwds)
581
582 if tracing_count == self._get_tracing_count():
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
609 # In this case we have created variables on the first call, so we run the
610 # defunned version which is guaranteed to never create variables.
--> 611 return self._stateless_fn(*args, **kwds) # pylint: disable=not-callable
612 elif self._stateful_fn is not None:
613 # Release the lock early so that multiple threads can perform the call
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in __call__(self, *args, **kwargs)
2418 with self._lock:
2419 graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
-> 2420 return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access
2421
2422 @property
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _filtered_call(self, args, kwargs)
1659 `args` and `kwargs`.
1660 """
-> 1661 return self._call_flat(
1662 (t for t in nest.flatten((args, kwargs), expand_composites=True)
1663 if isinstance(t, (ops.Tensor,
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _call_flat(self, args, captured_inputs, cancellation_manager)
1743 and executing_eagerly):
1744 # No tape is watching; skip to running the function.
-> 1745 return self._build_call_outputs(self._inference_function.call(
1746 ctx, args, cancellation_manager=cancellation_manager))
1747 forward_backward = self._select_forward_and_backward_functions(
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in call(self, ctx, args, cancellation_manager)
591 with _InterpolateFunctionError(self):
592 if cancellation_manager is None:
--> 593 outputs = execute.execute(
594 str(self.signature.name),
595 num_outputs=self._num_outputs,
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
57 try:
58 ctx.ensure_initialized()
---> 59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
60 inputs, attrs, num_outputs)
61 except core._NotOkStatusException as e:
InvalidArgumentError: Received a label value of 3 which is outside the valid range of [0, 3). Label values: 1 1 1 2 2 0 0 2 1 1 1 3 3 3 2 1 3 2 1 0 3 3 1 1 3 3 1 1 1 3 3 3
[[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-28-7830734727c4>:2) ]] [Op:__inference_train_function_549]
Function call stack:
train_function
您的标签 (train_y) 包含 0 到 3(含)之间的值:
Received a label value of 3 which is outside the valid range of [0, 3). Label values: 1 1 1 2 2 0 0 2 1 1 1 3 3 3 2 1 3 2 1 0 3 3 1 1 3 3 1 1 1 3 3 3
这意味着有 4 个不同的标签 (0, 1, 2, 3)。
因此你的模型最后一层的维度应该等于 4
而不是 3
:
model = keras.Sequential([keras.layers.Flatten(input_shape=(300,300,3)),
keras.layers.Dense(256, activation=tf.nn.tanh),
keras.layers.Dense(4, activation=tf.nn.softmax)
])
我正在使用 多层感知器 和 keras 进行疾病分类,下面是过程描述, 将数据集拆分为train_x、train_y、test_x、test_y:
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
images,y = shuffle(images, y,random_state=1)
train_x, test_x, train_y, test_y = train_test_split(images, y, test_size=0.10, random_state = 415)
使用tensorflow nad kears开发顺序模型
import keras
import tensorflow as tf
model = keras.Sequential([keras.layers.Flatten(input_shape=(300,300,3)),
keras.layers.Dense(256, activation=tf.nn.tanh),
keras.layers.Dense(3, activation=tf.nn.softmax)
])
编译模型
model.compile(optimizer=tf.optimizers.Adam(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
** 用 30 个时期训练模型**
model.fit(train_x,train_y, epochs=30) #I faced the error here
以下错误,请关注帮助我:
Epoch 1/30
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-32-7830734727c4> in <module>
1 # Train the model with 30 epochs
----> 2 model.fit(train_x,train_y, epochs=30)
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
64 def _method_wrapper(self, *args, **kwargs):
65 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
---> 66 return method(self, *args, **kwargs)
67
68 # Running inside `run_distribute_coordinator` already.
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/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)
846 batch_size=batch_size):
847 callbacks.on_train_batch_begin(step)
--> 848 tmp_logs = train_function(iterator)
849 # Catch OutOfRangeError for Datasets of unknown size.
850 # This blocks until the batch has finished executing.
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)
578 xla_context.Exit()
579 else:
--> 580 result = self._call(*args, **kwds)
581
582 if tracing_count == self._get_tracing_count():
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
609 # In this case we have created variables on the first call, so we run the
610 # defunned version which is guaranteed to never create variables.
--> 611 return self._stateless_fn(*args, **kwds) # pylint: disable=not-callable
612 elif self._stateful_fn is not None:
613 # Release the lock early so that multiple threads can perform the call
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in __call__(self, *args, **kwargs)
2418 with self._lock:
2419 graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
-> 2420 return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access
2421
2422 @property
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _filtered_call(self, args, kwargs)
1659 `args` and `kwargs`.
1660 """
-> 1661 return self._call_flat(
1662 (t for t in nest.flatten((args, kwargs), expand_composites=True)
1663 if isinstance(t, (ops.Tensor,
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in _call_flat(self, args, captured_inputs, cancellation_manager)
1743 and executing_eagerly):
1744 # No tape is watching; skip to running the function.
-> 1745 return self._build_call_outputs(self._inference_function.call(
1746 ctx, args, cancellation_manager=cancellation_manager))
1747 forward_backward = self._select_forward_and_backward_functions(
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/function.py in call(self, ctx, args, cancellation_manager)
591 with _InterpolateFunctionError(self):
592 if cancellation_manager is None:
--> 593 outputs = execute.execute(
594 str(self.signature.name),
595 num_outputs=self._num_outputs,
~/anaconda3/lib/python3.8/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
57 try:
58 ctx.ensure_initialized()
---> 59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
60 inputs, attrs, num_outputs)
61 except core._NotOkStatusException as e:
InvalidArgumentError: Received a label value of 3 which is outside the valid range of [0, 3). Label values: 1 1 1 2 2 0 0 2 1 1 1 3 3 3 2 1 3 2 1 0 3 3 1 1 3 3 1 1 1 3 3 3
[[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-28-7830734727c4>:2) ]] [Op:__inference_train_function_549]
Function call stack:
train_function
您的标签 (train_y) 包含 0 到 3(含)之间的值:
Received a label value of 3 which is outside the valid range of [0, 3). Label values: 1 1 1 2 2 0 0 2 1 1 1 3 3 3 2 1 3 2 1 0 3 3 1 1 3 3 1 1 1 3 3 3
这意味着有 4 个不同的标签 (0, 1, 2, 3)。
因此你的模型最后一层的维度应该等于 4
而不是 3
:
model = keras.Sequential([keras.layers.Flatten(input_shape=(300,300,3)),
keras.layers.Dense(256, activation=tf.nn.tanh),
keras.layers.Dense(4, activation=tf.nn.softmax)
])