Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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梯度计算失败”这句话;维度中的索引无效:3,0,C“;_Python_Tensorflow_Keras - Fatal编程技术网

Python keras梯度计算失败”这句话;维度中的索引无效:3,0,C“;

Python keras梯度计算失败”这句话;维度中的索引无效:3,0,C“;,python,tensorflow,keras,Python,Tensorflow,Keras,当我试图在一个有conv1d层的网络中计算xw.r.tyy的梯度(不管X和Y是什么)时,我得到的消息是“来自维度的无效索引:3,0,C”,这个过程就结束了 最简单的工作示例: import numpy as np from tensorflow.python.keras import models from tensorflow.python.keras import layers from tensorflow.python.keras import backend as K inp =

当我试图在一个有conv1d层的网络中计算xw.r.tyy的梯度(不管X和Y是什么)时,我得到的消息是“来自维度的无效索引:3,0,C”,这个过程就结束了

最简单的工作示例:

import numpy as np

from tensorflow.python.keras import models
from tensorflow.python.keras import layers
from tensorflow.python.keras import backend as K

inp = layers.Input(shape=(10, 20,))
conv = layers.Conv1D(filters=10, kernel_size=2)(inp)
pool = layers.GlobalMaxPool1D()(conv)
output = layers.Dense(1, activation="sigmoid")(pool)

m = models.Model(inp, output)

m.summary()

m.compile(optimizer="adam", loss="binary_crossentropy")
似乎有效:

m.fit(x=np.random.randn(100, 10, 20), y=np.random.randn(100))
这打破了:

loss = K.mean(m.output)
grads = K.gradients(loss, m.input)[0]
f = K.function([m.input], [grads])
print(f([np.random.randn(10, 20)]))
我的python、keras和tf版本:

import tensorflow as tf
import sys
from tensorflow.python import keras

print(tf.__version__)
print(keras.__version__)
print(sys.version)

1.12.0
2.1.6-tf
3.6.7 |Anaconda, Inc.| (default, Oct 23 2018, 14:01:38) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]
我计算梯度wrt到什么并不重要。。错误消息是

2019-04-19 17:00:58.249788: F ./tensorflow/core/util/tensor_format.h:420] Check failed: index >= 0 && index < dimension_attributes.size() Invalid index from the dimension: 3, 0, C
2019-04-19 17:00:58.249788:F./tensorflow/core/util/tensor_format.h:420]检查失败:index>=0&&index

根据错误消息,我看到它与conv1d层有关,但我不太明白这里缺少了什么。感谢您的提示。

简短回答:形状不兼容,将调用更改为:
f([np.random.randn(1,10,20)])

详细回答:由于您已将输入形状设置为
(10,20,)
,这意味着每个输入样本的形状为
(10,20)
。但是,您还必须注意,Keras模型期望一批样本作为其输入。因此,在这种情况下,它需要一个具有3个维度的数组,其中第一个维度表示批次维度。由于要向模型提供一个样本,因此输入数组的形状必须为
(1、10、20)
。因此,您必须相应地更改
randn
函数中的形状:

f([np.random.randn(1, 10, 20)])
                   ^
                   |
                   |
              batch dimension

我不能重复你的问题。我的返回错误是
无效参数:转置需要大小为3的向量。但输入(1)是大小为4的向量,位于
tensorflow=1.12.0
keras=2.1.6-tf
上。