【发布时间】:2018-03-16 16:35:44
【问题描述】:
我正在尝试将稀疏 numpy 矩阵用于以 tensorflow 作为后端的 keras。该模型可以编译,但在拟合时会出现错误。代码如下。任何帮助表示赞赏。
from keras.layers import Dense, Input
from keras.models import Model
inputs = Input(shape=(trainX.shape[1],), sparse=True)
outputs = Dense(trainY.shape[1], activation='softmax')(inputs)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
trainX 是
<2404941x337071 sparse matrix of type '<type 'numpy.float64'>'
with 4765705 stored elements in Compressed Sparse Row format>
同样trainY是一个CSR矩阵
model.fit(trainX, trainY, verbose=1)
出现以下错误
ValueError: setting an array element with a sequence.
【问题讨论】:
-
如果文档(例如
fit)没有说参数可以是稀疏矩阵,那么它就不能。 stackoverflow.com/questions/36803689/…。通常,如果输入不是数组,代码会将其包装在np.asarray(trainX)中。如果输入是稀疏的,则结果是一个 1 元素对象数组,这不是您想要的。 -
是的,我就是这么想的。但是为什么他们会有一个稀疏的选择呢?在这里github.com/fchollet/keras/issues/4984 一些人声称已经解决了问题@hpaulj
-
我认为对于稀疏张量,使用自定义批处理生成器将张量的一部分转换回其密集形式。参考:stackoverflow.com/questions/37609892/keras-sparse-matrix-issue
标签: numpy tensorflow keras