Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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
keras中的输入形状(该损失预计目标与输出形状相同)_R_Tensorflow_Keras_Neural Network - Fatal编程技术网

keras中的输入形状(该损失预计目标与输出形状相同)

keras中的输入形状(该损失预计目标与输出形状相同),r,tensorflow,keras,neural-network,R,Tensorflow,Keras,Neural Network,这是我第一次使用keras,我正试图遵循我在网上找到的教程,并将我自己的数据与之匹配。我有一个矩阵和二进制标签 > str(d_train) num [1:1062, 1:180] -0.04748 0.04607 -0.05429 -0.0126 -0.00219 ... > str(trainlabels) num [1:1062, 1:2] 0 0 0 0 0 0 1 0 0 0 ... 我的代码: model = keras_model_sequential() mod

这是我第一次使用keras,我正试图遵循我在网上找到的教程,并将我自己的数据与之匹配。我有一个矩阵和二进制标签

> str(d_train)
 num [1:1062, 1:180] -0.04748 0.04607 -0.05429 -0.0126 -0.00219 ...
> str(trainlabels)
 num [1:1062, 1:2] 0 0 0 0 0 0 1 0 0 0 ...
我的代码:

model = keras_model_sequential()
model %>%
  layer_dense(units = 8, activation = 'relu', input_shape = c(180)) %>%
  layer_dense(units = 3, activation = "softmax")
summary(model)
## Compile
model %>%
  compile(loss = "binary_crossentropy",
          optimizer = "adam",
          metrics = "accuracy")
## Fit model
history = model %>%
  fit(d_train,
      trainlabels,
      epoch=200,
      batch_size=32,
      validation_split=0.2)
我似乎无法适应模型,我收到以下错误消息:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: A target array with shape (1062, 2) was passed for an output of shape (None, 3) while using as loss `binary_crossentropy`. This loss expects targets to have the same shape as the output.

根据错误消息,要求输入数组的不同形状,我尝试更改周围的尺寸,但没有成功。

我不是R专家,但在这里:

layer_dense(units = 3, activation = "softmax")
您告诉Keras您的网络的输出有三个类。您的标签有shape
(1062,2)
,这表明它有两个类,因此存在不一致性

你可以在上一次密集训练中改变
units=2
,它应该会起作用。还请注意,您正在使用
softmax
激活,在这种情况下,您应该更喜欢使用
category\u crossentropy
loss


要使用
binary\u crossentropy
进行二进制分类,您应该有
units=1
sigmoid
激活,标签应该是
(1062,1)
(1062,)
,这意味着它们是0-1编码的。

谢谢您的建议。我尝试了以下方法:将最后一层密度更改为1,使用了带有二进制交叉熵的“sigmoid”激活,而不是一个热编码,只使用了二进制编码值向量(num[1:1062]11 11 11 11…),我得到了另一个错误:py_调用impl中的错误(可调用,dots$args,dots$keywords):UnboundLocalError:之前引用的局部变量“a”assignment@MarekPrachař这看起来像是tensorflow或keras的不兼容版本,您应该尝试这两个版本的最新版本(tf 1.13和keras 2.2.4)。好的,看来tensorflow版本1.13存在问题,可以通过以下方法解决:安装_tensorflow(version=“1.12”)在那之后它开始工作了!非常感谢。