讨厌在机器学习上问这样的问题,但谷歌搜索没有产生任何用处 - 我刚刚找到2个github线程,其中超级旧版本的tensorflow上的人得到了同样的错误消息,但是不是出于同样的原因我得到它。
基本上;我正在为工作实施这张面部纸;并且它使用空间softargmax(只是一个接收一堆图像的层,就像this一样 - 它返回图像中最“强烈的部分”(所以只是白色斑点的x,y坐标)它接收了一个包含68个这些图像的数组(所有1个通道,因此数组为100x100x68),并为每个图像提供68对x,y坐标 - 这些最终成为面部点。
我用keras写的这个层是;
class spatial_softArgmax(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(spatial_softArgmax, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
# self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], self.output_dim), initializer='uniform', trainable=True)
super(spatial_softArgmax, self).build(input_shape) # Be sure to call this somewhere!
def call(self, x):
#print "input to ssm: " + str(x.shape)
maps = layers.spatial_softmax(x, data_format='NCHW')
#maps = tf.reshape(maps, [2, 68])
#print "output of ssm: " + str(maps.shape)
return maps
def get_config(self):
config = super(spatial_softArgmax, self).get_config()
config['output_dim'] = self.output_dim
config['input_shape'] = self.input_shape
return config
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
虽然不行;像一样;每当我尝试开始训练时,我会不断收到“无值不支持”的错误(如果我用密集替换它就开始训练 - 所以问题肯定是这一层) - 这让我认为我的图层没有返回什么?我在TF代码中挖了一下这个异常引起的但却没有找到太多......
如果你们看到我的图层有什么问题只是通过看一眼我真的很感激,如果你让我知道的话;我需要今晚一夜之间进行这种网络培训。
编辑:我删除了self.kernel行;但我现在正在:x,y shape (12000, 3, 100, 100) - (12000, 68, 2)
Traceback (most recent call last):
File "architecture.py", line 58, in <module>
model.fit(x, y, batch_size=1, epochs=50, verbose=1)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1522, in fit
batch_size=batch_size)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1382, in _standardize_user_data
exception_prefix='target')
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 132, in _standardize_input_data
str(array.shape))
ValueError: Error when checking target: expected spatial_soft_argmax_1 to have 2 dimensions, but got array with shape (12000, 68, 2)
答案 0 :(得分:2)
您已经添加了权重self.kernel
,但在call
函数的任何位置都没有使用它。
因此,TF无法计算self.kernel
中参数的梯度。在这种情况下,渐变将为None
,这就是为什么您发现抱怨操作None
值的错误。
删除行self.kernel = self.add_weight(...)
应该可以正常工作。