Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras分类交叉熵softmax输入.dim_大小错误_Python_Tensorflow_Keras_Neural Network_Softmax - Fatal编程技术网

Python Keras分类交叉熵softmax输入.dim_大小错误

Python Keras分类交叉熵softmax输入.dim_大小错误,python,tensorflow,keras,neural-network,softmax,Python,Tensorflow,Keras,Neural Network,Softmax,我正在开发一个相当复杂的管道,在这里我从TFRecords文件构建tf.数据集,并将这些数据集与数据增强和许多健全性检查和验证一起提供给Keras模型。所以,请允许我为不能带来一个完全可复制的例子而道歉 无论如何,我正在尝试训练一个图像分类模型,我的图像数据是192*256灰度张量,标签是一个热编码的三维向量 当我尝试拟合模型时,出现了一个问题,它似乎来自softmax激活和/或分类交叉熵损失函数 output_len = 3 activation = 'softmax' loss = 'cat

我正在开发一个相当复杂的管道,在这里我从TFRecords文件构建tf.数据集,并将这些数据集与数据增强和许多健全性检查和验证一起提供给Keras模型。所以,请允许我为不能带来一个完全可复制的例子而道歉

无论如何,我正在尝试训练一个图像分类模型,我的图像数据是192*256灰度张量,标签是一个热编码的三维向量

当我尝试拟合模型时,出现了一个问题,它似乎来自softmax激活和/或分类交叉熵损失函数

output_len = 3
activation = 'softmax'
loss = 'categorical_crossentropy'
optimizer = keras.optimizers.Adam()

categorical_model = keras.Sequential([
    keras.layers.Flatten(input_shape=(192, 256, 1)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(output_len, activation='softmax')
])

categorical_model.summary()

categorical_model.compile(optimizer=optimizer,
              loss=loss)

print(aug_data[0])
print(aug_data[1])

categorical_model.fit(aug_data, steps_per_epoch = 1070, epochs=2)
在上面的例子中,'aug_data[0]'是训练样本,[1]是标签(将tf.data集提供给Keras要求样本和标签是元组)。运行上述命令可以让我:

Model: "sequential_27"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_27 (Flatten)         (None, 49152)             0         
_________________________________________________________________
dense_54 (Dense)             (None, 128)               6291584   
_________________________________________________________________
dense_55 (Dense)             (None, 3)                 387       
=================================================================
Total params: 6,291,971
Trainable params: 6,291,971
Non-trainable params: 0
_________________________________________________________________
Tensor("IteratorGetNext_26:0", shape=(?, 192, 256, 1), dtype=float32)
Tensor("IteratorGetNext_26:1", shape=(?, 3), dtype=float32)
Train on 1070 samples
Epoch 1/2
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-77-12cc2cbea62b> in <module>()
     18 print(aug_data[1])
     19 
---> 20 categorical_model.fit(aug_data, steps_per_epoch = 1070, epochs=2)

4 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py in __call__(self, *args, **kwargs)
   1470         ret = tf_session.TF_SessionRunCallable(self._session._session,
   1471                                                self._handle, args,
-> 1472                                                run_metadata_ptr)
   1473         if run_metadata:
   1474           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument: Expected begin[0] == 0 (got 1) and size[0] == 0 (got 1) when input.dim_size(0) == 0
     [[{{node loss_27/dense_55_loss/softmax_cross_entropy_with_logits/Slice_1}}]]
  (1) Invalid argument: Expected begin[0] == 0 (got 1) and size[0] == 0 (got 1) when input.dim_size(0) == 0
     [[{{node loss_27/dense_55_loss/softmax_cross_entropy_with_logits/Slice_1}}]]
     [[loss_27/mul/_1495]]
0 successful operations.
0 derived errors ignored.
模型:“顺序_27”
_________________________________________________________________
层(类型)输出形状参数
=================================================================
展平27(展平)(无,49152)0
_________________________________________________________________
致密(致密)(无,128)6291584
_________________________________________________________________
致密(致密)(无,3)387
=================================================================
总参数:6291971
可培训参数:6291971
不可训练参数:0
_________________________________________________________________
张量(“IteratorGetNext_26:0”,shape=(?,192256,1),dtype=float32)
张量(“IteratorGetNext_26:1”,shape=(?,3),dtype=float32)
训练1070个样本
纪元1/2
---------------------------------------------------------------------------
InvalidArgumentError回溯(最后一次最近调用)
在()
18打印(八月数据[1])
19
--->20分类模型拟合(8月数据,每个历元的步长=1070,历元=2)
4帧
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/client/session.py in_u_________(self,*args,**kwargs)
1470 ret=tf_session.tf_SessionRunCallable(self._session._session,
1471自动控制手柄,args,
->1472运行元数据(ptr)
1473如果运行元数据:
1474 proto_data=tf_session.tf_GetBuffer(运行元数据ptr)
InvalidArgumentError:发现2个根错误。
(0)无效参数:输入时应为begin[0]==0(得到1)和size[0]==0(得到1)。dim_size(0)==0
[{{node loss_27/densite_55_loss/softmax_cross_entropy_with_logits/Slice_1}}]
(1) 无效参数:输入时需要开始[0]==0(得到1)和大小[0]==0(得到1)。尺寸大小(0)==0
[{{node loss_27/densite_55_loss/softmax_cross_entropy_with_logits/Slice_1}}]
[[loss_27/mul/_1495]]
0成功的操作。
忽略0个派生错误。
我正在打印输入和标签张量的形状(在模型摘要的正下方),以确认形状与预期一致。然而,我却犯了一个奇怪的错误,这是我一生都无法解决的。对于稀疏交叉熵,我得到了另一个错误,同样是批处理模糊

有趣的是,使用二进制交叉熵可以让模型运行(尽管学习不多…)

我以前从未尝试过将tf.dataset和kera组合在一起,这似乎是一个相当大的挑战。对此的任何意见都会很有帮助,非常感谢


干杯

尝试替换以下代码行:

categorical_model.fit(aug_data, steps_per_epoch = 1070, epochs=2)
这一行:

categorical_model.fit(aug_data[0], aug_data[1], steps_per_epoch = 1070, epochs=2)

因为
category\u model.fit()
函数的输入必须是
的元组(aug\u data[0],aug\u data[1])
,而不是包含沿第0维堆叠的输入和标签的输入。

尝试替换下面的代码行:

categorical_model.fit(aug_data, steps_per_epoch = 1070, epochs=2)
这一行:

categorical_model.fit(aug_data[0], aug_data[1], steps_per_epoch = 1070, epochs=2)

因为
category\u model.fit()
函数的输入必须是
的元组(aug\u data[0],aug\u data[1])
而不是包含沿第0维堆叠的输入和标签的输入。

打印什么(aug\u data.shape)比如说?我在这一点上可能是错的,但有可能
softmax\u cross\u entropy\u with\u logits
需要形状
(无,1,len\u输出)
。也许可以尝试重塑数据,看看它是否有效?@Amit tuple没有形状:/tuple的元素有形状-它们的形状与打印的一样above@vvalchev它期望元组的每个元素都有shape=(192256,1)。。您的代码是否满意?@sebastian sz no bueno:(将第二个维度扩展到最后一个维度,用于“tensor”(“IteratorGetNext_32:1”,shape=(?,1,3),dtype=float32)”的标签张量形状,但有相同的错误:(打印什么(aug_data.shape)说什么?我在这一点上可能是错的,但有可能
softmax\u cross\u entropy\u with\u logits
需要形状
(无,1,len\u输出)
。也许可以尝试重塑数据,看看它是否有效?@Amit tuple没有形状:/tuple的元素有形状-它们的形状与打印的一样above@vvalchev它希望元组的每个元素都有shape=(192256,1)…您的代码中是否满足此要求?@sebastian sz no bueno:(将第二个维度扩展到最后一个维度,用于“tensor”(“IteratorGetNext_32:1”,shape=(?,1,3),dtype=float32)”的标签张量形状,错误相同:(