Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
Numpy 在Keras和Tensorflow中使用稀疏输入_Numpy_Tensorflow_Keras - Fatal编程技术网

Numpy 在Keras和Tensorflow中使用稀疏输入

Numpy 在Keras和Tensorflow中使用稀疏输入,numpy,tensorflow,keras,Numpy,Tensorflow,Keras,我正在尝试使用稀疏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)

我正在尝试使用稀疏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>
给出以下错误

ValueError: setting an array element with a sequence.

如果编写自定义训练循环,则可以使用稀疏矩阵作为Keras模型的输入。 在下面的示例中,模型将稀疏矩阵作为输入,并输出密集矩阵

from keras.layers import Dense, Input
from keras.models import Model
import scipy
import numpy as np

trainX = scipy.sparse.random(1024, 1024)
trainY = np.random.rand(1024, 1024)

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'])

steps = 10
for i in range(steps):
  # For simplicity, we directly use trainX and trainY in this example
  # Usually, this is where batches are prepared
  print(model.train_on_batch(trainX, trainY))
# [3549.2546, 0.0]
# ...
# [3545.6448, 0.0009765625]

从您的示例来看,您似乎也希望输出是稀疏矩阵。这更加困难,因为您的模型需要输出稀疏矩阵,并且必须使用稀疏矩阵计算损失。此外,我认为Keras还不支持稀疏输出。

如果文档(例如,for
fit
)没有说参数可以是稀疏矩阵,那么它就不能。通常,如果输入不是数组,代码会将其包装在
np.asarray(trainX)
中。如果输入是稀疏的,结果是一个1元素的对象数组,这不是你想要的。是的,我就是这么想的。但为什么他们会有一个稀疏的选择呢?在这里,一些人声称已经解决了@hpauljAnd这里的问题:我认为对于稀疏张量,使用了一个定制的批处理生成器,只将张量的一部分转换回稠密形式。Ref:我遇到了这个错误->试图将一个不支持类型()的值()转换成张量。
from keras.layers import Dense, Input
from keras.models import Model
import scipy
import numpy as np

trainX = scipy.sparse.random(1024, 1024)
trainY = np.random.rand(1024, 1024)

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'])

steps = 10
for i in range(steps):
  # For simplicity, we directly use trainX and trainY in this example
  # Usually, this is where batches are prepared
  print(model.train_on_batch(trainX, trainY))
# [3549.2546, 0.0]
# ...
# [3545.6448, 0.0009765625]