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
Python N元组网络的Keras(稀疏输入)_Python_Tensorflow_Machine Learning_Keras_Sparse Matrix - Fatal编程技术网

Python N元组网络的Keras(稀疏输入)

Python N元组网络的Keras(稀疏输入),python,tensorflow,machine-learning,keras,sparse-matrix,Python,Tensorflow,Machine Learning,Keras,Sparse Matrix,我正在尝试使用keras训练N元组网络。N元组网络只是一个热激活模式的稀疏数组。假设棋盘上有64个方块,每个方块包含可能的N种棋子,因此,对于64*N个可能的参数,将始终有64个激活的方块,并存储为2d数组[64][N]。或者每个可能的2x2正方形,因此每个正方形有N^4个可能的配置。这种网络是线性的,将输出1个值。培训是一个很好的老SGD之类的 我用C++中的代码,使用查找表和求和,成功地训练了网络。但我尝试使用keras,因为keras允许使用不同的优化算法、GPU等。对于初学者,我将2d数

我正在尝试使用keras训练N元组网络。N元组网络只是一个热激活模式的稀疏数组。假设棋盘上有64个方块,每个方块包含可能的N种棋子,因此,对于64*N个可能的参数,将始终有64个激活的方块,并存储为2d数组[64][N]。或者每个可能的2x2正方形,因此每个正方形有N^4个可能的配置。这种网络是线性的,将输出1个值。培训是一个很好的老SGD之类的

我用C++中的代码,使用查找表和求和,成功地训练了网络。但我尝试使用keras,因为keras允许使用不同的优化算法、GPU等。对于初学者,我将2d数组更改为大向量,但很快它就变得不切实际了。有数千个可能的参数,其中只有少数(固定)个1,其余为0

我想知道在keras(或类似的库)中是否可以使用这样的训练数据:13,16,11,11,5,…,3,其中这些数字将是索引,而不是使用一个大向量0,0,0,0,0,…,1,0,0,0,…,1,0,0,…,0,

你可以使用,),然后设置
sparse=True




非常感谢。也许它现在并没有完全解决我的问题,至少我知道该找什么了。
def sparse_one_hot(y):

  m = len(y)
  n_classes = len(tf.unique(tf.squeeze(y))[0])

  dim2 = tf.range(m, dtype='int64')[:, None]
  indices = tf.concat([y, dim2], axis=1)

  ones = tf.ones(shape=(m, ), dtype='float32')

  sparse_y = tf.sparse.SparseTensor(indices, ones, dense_shape=(m, n_classes))
  
  return sparse_y
import tensorflow as tf

y = tf.random.uniform(shape=(10, 1), minval=0, maxval=4, dtype=tf.int64)

sparse_y = sparse_one_hot(y) # sparse_y.values, sparse_y.indices

# set sparse=True, for Input
# tf.keras.Input(..., sparse=True, ...)