Python 3.x Tensorflow 2.0 InvalidArgumentError:断言失败:[条件x==y未保留元素:]

Python 3.x Tensorflow 2.0 InvalidArgumentError:断言失败:[条件x==y未保留元素:],python-3.x,tensorflow,keras,deep-learning,mnist,Python 3.x,Tensorflow,Keras,Deep Learning,Mnist,我正在训练一名跨国有线电视新闻网记者。当我运行代码时,问题就来了。我尝试了其他答案,但都不起作用。我是TensorFlow的新手,有人能解释一下这个错误吗。这是我的密码。我正在使用Pycharm 2020.2。以及anaconda中的Python 3.6。我找不到任何帮助 import tensorflow as tf from tensorflow.keras.models import Sequential mnist = tf.keras.datasets.mnist (x_train

我正在训练一名跨国有线电视新闻网记者。当我运行代码时,问题就来了。我尝试了其他答案,但都不起作用。我是TensorFlow的新手,有人能解释一下这个错误吗。这是我的密码。我正在使用Pycharm 2020.2。以及anaconda中的Python 3.6。我找不到任何帮助

import tensorflow as tf
from tensorflow.keras.models import Sequential

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_train, axis=1)



model = Sequential()

model.add(tf.keras.layers.Dense(256))
model.add(tf.keras.layers.Conv1D(kernel_size=4, strides=1, filters=4, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=3, strides=1, activation="relu", filters=3))
model.add(tf.keras.layers.Dense(128, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=2, filters=2, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=1, filters=1, strides=1, activation="relu"))
model.add(tf.keras.layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.MaxPool1D(pool_size=2, strides=1))
model.add(tf.keras.layers.Dense(256, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=4, filters=4, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=3, filters=3, strides=1, activation="relu"))
model.add(tf.keras.layers.MaxPool1D(pool_size=2, strides=1))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(128, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=2, filters=2, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=1, filters=1, strides=1, activation="relu"))
model.add(tf.keras.layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.Dense(16, activation="softmax"))
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


    
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x=x_train, y=y_train, batch_size=64, epochs=5, shuffle=True, validation_split=0.1)
model.summary()
它给出了一个错误:

Train on 54000 samples, validate on 6000 samples
Epoch 1/5
2020-09-09 15:16:16.953428: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-09-09 15:16:17.146701: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-09-09 15:16:17.741916: W tensorflow/stream_executor/gpu/redzone_allocator.cc:312] Internal: Invoking GPU asm compilation is supported on Cuda non-Windows platforms only
Relying on driver to perform ptx compilation. This message will be only logged once.
2020-09-09 15:16:18.085250: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Invalid argument: assertion failed: [Condition x == y did not hold element-wise:] [x (loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/Shape_1:0) = ] [64 1] [y (loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/strided_slice:0) = ] [64 14]
     [[{{node loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/assert_equal_1/Assert/Assert}}]]
   64/54000 [..............................] - ETA: 39:34Traceback (most recent call last):
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\IPython\core\interactiveshell.py", line 3331, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-d2317d03e1c1>", line 1, in <module>
    runfile('F:/Pycharm_projects/my_fun_project/Fake or real news/fake-or-real-news/bitcoin.py', wdir='F:/Pycharm_projects/my_fun_project/Fake or real news/fake-or-real-news')
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "F:/Pycharm_projects/my_fun_project/Fake or real news/fake-or-real-news/bitcoin.py", line 41, in <module>
    model.fit(x=x_train, y=y_train, batch_size=64, epochs=5, shuffle=True, validation_split=0.1)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 819, in fit
    use_multiprocessing=use_multiprocessing)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 342, in fit
    total_epochs=epochs)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 128, in run_one_epoch
    batch_outs = execution_function(iterator)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py", line 98, in execution_function
    distributed_function(input_fn))
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\def_function.py", line 568, in __call__
    result = self._call(*args, **kwds)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\def_function.py", line 632, in _call
    return self._stateless_fn(*args, **kwds)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\function.py", line 2363, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\function.py", line 1611, in _filtered_call
    self.captured_inputs)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\function.py", line 1692, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\function.py", line 545, in call
    ctx=ctx)
  File "F:\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError:  assertion failed: [Condition x == y did not hold element-wise:] [x (loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/Shape_1:0) = ] [64 1] [y (loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/strided_slice:0) = ] [64 14]
     [[node loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/assert_equal_1/Assert/Assert (defined at F:/Pycharm_projects/my_fun_project/Fake or real news/fake-or-real-news/bitcoin.py:41) ]] [Op:__inference_distributed_function_2970]
Function call stack:
distributed_function

培训54000个样本,验证6000个样本
纪元1/5
2020-09-09 15:16:16.953428:I tensorflow/stream_executor/platform/default/dso_loader.cc:44]已成功打开动态库cublas64_10.dll
2020-09-09 15:16:17.146701:I tensorflow/stream_executor/platform/default/dso_loader.cc:44]已成功打开动态库cudnn64_7.dll
2020-09-09 15:16:17.741916:W tensorflow/stream_executor/gpu/redzone_分配器。cc:312]内部:仅在Cuda非Windows平台上支持调用gpu asm编译
依靠驱动程序执行ptx编译。此消息将只记录一次。
2020-09-09 15:16:18.085250:W tensorflow/core/common_runtime/base_collective_executor.cc:217]BaseCollectiveExecutor::StartPort无效参数:断言失败:[条件x==y未按元素保存:[x(丢失/输出_1_丢失/稀疏SoftMaxCrossEntropyWithLogits/Shape_1:0)=][64 1][y(丢失/输出\u 1 \u丢失/稀疏SoftMaxCrossEntropyWithLogits/跨步\u切片:0)=][64 14]
[{{node loss/output_1_loss/SparseSoftmaxCrossEntropyWithLogits/assert_equal_1/assert/assert}}]
64/54000[……]-预计到达时间:39:34回溯(最近一次呼叫最后一次):
运行代码中的文件“F:\anaconda\envs\tensorflow1\lib\site packages\IPython\core\interactiveshell.py”,第3331行
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
runfile('F:/Pycharm\u projects/my\u fun\u project/Fake或real news/Fake或real news/bitcoin.py',wdir='F:/Pycharm\u projects/my\u fun\u project/Fake或real news/Fake或real news')
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python ce\helpers\pydev\\u pydev_bundle\pydev_umd.py”,第197行,在运行文件中
pydev_imports.execfile(文件名、全局变量、本地变量)#执行脚本
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.3.3\plugins\python ce\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“F:/Pycharm\u projects/my\u fun\u project/Fake或real news/Fake或real news/bitcoin.py”,第41行,在
模型拟合(x=x\u序列,y=y\u序列,批量大小=64,历代数=5,随机数=True,验证分割=0.1)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\keras\engine\training.py”,第819行
使用多处理=使用多处理)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2.py”,第342行
总(单位时间=时间)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2.py”,第128行,在run\u one\u中
批处理输出=执行函数(迭代器)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils.py”,第98行,在执行函数中
分布函数(输入函数)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\def\u function.py”,第568行,在调用中__
结果=自身调用(*args,**kwds)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\def\u function.py”,第632行,在调用中
返回self.\u无状态\u fn(*args,**kwds)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\function.py”,第2363行,在调用中__
返回图形\函数。\过滤\调用(args,kwargs)\ pylint:disable=受保护的访问
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\function.py”,第1611行,在过滤调用中
自捕获(U输入)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\function.py”,第1692行,位于调用平面中
ctx,args,取消管理器=取消管理器)
调用中第545行的文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\function.py”
ctx=ctx)
文件“F:\anaconda\envs\tensorflow1\lib\site packages\tensorflow\u core\python\eager\execute.py”,第67行,在quick\u execute中
六、将_从(核心状态)提升到_异常(例如代码、消息),无
文件“”,第3行,从
tensorflow.python.framework.errors\u impl.InvalidArgumentError:断言失败:[条件x==y未保持元素状态:[x(丢失/输出\u 1\u丢失/稀疏SoftMaxCrossEntropyWithLogits/Shape\u 1:0)=][64 1][y(丢失/输出\u 1\u丢失/稀疏SoftMaxCrossEntropyWithLogits/Striped\u切片:0)=][64 14]
[[node loss/output\u 1\u loss/SparseSoftmaxCrossEntropyWithLogits/assert\u equal\u 1/assert/assert(定义于F:/Pycharm\u projects/my\u fun\u project/Fake或real news/Fake或real news/bitcoin.py:41)][Op:\u推断\u分布式功能\u 2970]
函数调用堆栈:
分布函数

错误是因为您的
输出\u形状
标签\u形状
不匹配。 这是您创建的模型的体系结构:

如您所见,您的模型输出
(批次大小,14,16)
,但您提供的标签的形状为
(批次大小,16)

要解决此问题,请尝试在最终的
密集层之前添加
展平层

代码:

model = Sequential()
model.add(tf.keras.layers.Dense(256, input_shape = (28,28)))
model.add(tf.keras.layers.Conv1D(kernel_size=4, strides=1, filters=4, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=3, strides=1, activation="relu", filters=3))
model.add(tf.keras.layers.Dense(128, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=2, filters=2, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=1, filters=1, strides=1, activation="relu"))
model.add(tf.keras.layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.MaxPool1D(pool_size=2, strides=1))
model.add(tf.keras.layers.Dense(256, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=4, filters=4, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=3, filters=3, strides=1, activation="relu"))
model.add(tf.keras.layers.MaxPool1D(pool_size=2, strides=1))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(128, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=2, filters=2, strides=1, activation="relu"))
model.add(tf.keras.layers.Conv1D(kernel_size=1, filters=1, strides=1, activation="relu"))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.Dense(16, activation="softmax"))
现在,您的模型体系结构如下所示:


现在,您的模型有了匹配的形状,可以毫无问题地进行训练。

谢谢您的解释。它起作用了。我有一个问题,你是如何制作这个图表的。再次感谢您可以使用
tf.keras.utils.plot\u模型(模型'my\u first\u model.png',show\u shapes=True)
。它需要外部软件graphviz和少量python库