当前位置: 首页 > 知识库问答 >
问题:

错误:参数必须是一个密集张量:范围(2,3)-得到了形状[1],但想要[]

危寒
2023-03-14

我正在尝试用Python为使用TensorFlow的自组织映射(SOM)运行一个a代码。我从这里得到了代码,但当我运行它时,我得到了一个错误:

错误:参数必须是一个密集张量:范围(2,3)-得到了形状1,但想要[]

我认为有关守则是:

s = SOM( (3,), 30, num_training, sess )

然后:

class SOM:
    def __init__(self, input_shape, map_size_n, num_expected_iterations, session):
    input_shape = tuple([i for i in input_shape if i is not None])

或:

def initialize_graph(self):
    self.weights = tf.Variable( tf.random_uniform((self.n*self.n, )+self.input_shape, 0.0, 1.0) ) 

    self.input_placeholder = tf.placeholder(tf.float32, (None,)+self.input_shape)
    self.current_iteration = tf.placeholder(tf.float32)

    ## Compute the current iteration's neighborhood sigma and learning rate alpha:
    self.sigma_tmp = self.sigma * tf.exp( - self.current_iteration/self.timeconst_sigma  )
    self.sigma2 = 2.0*tf.multiply(self.sigma_tmp, self.sigma_tmp)

    self.alpha_tmp = self.alpha * tf.exp( - self.current_iteration/self.timeconst_alpha  )


    self.input_placeholder_ = tf.expand_dims(self.input_placeholder, 1)
    self.input_placeholder_ = tf.tile(self.input_placeholder_, (1,self.n*self.n,1) )

    self.diff = self.input_placeholder_ - self.weights
    self.diff_sq = tf.square(self.diff)
    self.diff_sum = tf.reduce_sum( self.diff_sq, axis=range(2, 2+len(self.input_shape)) )

    # Get the index of the best matching unit
    self.bmu_index = tf.argmin(self.diff_sum, 1)

    self.bmu_dist = tf.reduce_min(self.diff_sum, 1)
    self.bmu_activity = tf.exp( -self.bmu_dist/self.sigma_act )

    self.diff = tf.squeeze(self.diff)

    self.diff_2 = tf.placeholder(tf.float32, (self.n*self.n,)+self.input_shape)
    self.dist_sliced = tf.placeholder(tf.float32, (self.n*self.n,))

    self.distances = tf.exp(-self.dist_sliced / self.sigma2 )
    self.lr_times_neigh = tf.multiply( self.alpha_tmp, self.distances )
    for i in range(len(self.input_shape)):
        self.lr_times_neigh = tf.expand_dims(self.lr_times_neigh, -1)
    self.lr_times_neigh = tf.tile(self.lr_times_neigh, (1,)+self.input_shape )

    self.delta_w = self.lr_times_neigh * self.diff_2

    self.update_weights = tf.assign_add(self.weights, self.delta_w)

整个错误消息是:

回溯(最后一次调用):文件“C:\Users\jakub\AppData\Local\Programs\Python35\lib\site packages\tensorflow\Python\framework\op\def\u library.py”,第491行,在apply\op preferred\u dtype=default\u dtype)文件“C:\Users\jakub\AppData\Local\Programs\Python35\lib\site packages\tensorflow\Python\Python\framework\py\framework\ops.py”,第704行,在“C:\Users\jakub\AppData\Local\Programs\Python\35\lib\site packages\tensorflow\Python\framework\constant\op.py”文件的第113行中,在“C:\Users\jakub\AppData\Local\Programs\Python\Python\site packages\tensorflow\Python\framework\constant\op.py”函数返回常量(v,dtype=dtype,name=name)文件中“C:\Users\jakub\AppData\Local\Programs\Python 35\lib\site packages\tensorflow\Python\framework\constant\u op.py”,第102行,在常量tensor\u util中。生成tensor proto(value,dtype=dtype,shape=shape,verify\shape=verify\u shape)文件“C:\Users\jakub\AppData\Local\Programs\Python\Python 35\lib\site packages\tensorflow\Python\framework\tensor\til。py“,第379行,在make_tensor_proto_GetDenseDimensions(values)))ValueError:参数必须是稠密张量:范围(2,3)-获得形状1,但需要[]。

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用):文件“C:\Users\jakub\AppData\Local\Programs\Python\35\lib\site packages\tensorflow\Python\framework\op_def_library.py”,第505行,在apply_op values中,作为_ref=input_arg。是(参考)。数据类型。命名文件“C:\Users\jakub\AppData\Local\Programs\Python 35\lib\site packages\tensorflow\Python\framework\ops.py”,第704行,位于内部\u convert\u tensor ret=conversion\u func(值,dtype=dtype,name=name,as\u ref=as\u ref)文件“C:\Users\jakub\AppData\Local\Programs\Python\Python 35\lib\site packages\tensorflow\Python\Python\framework\framework\constant\constant\op,第113行,在常数张量转换函数返回常数(v,dtype=dtype,name=name)文件“C:\Users\jakub\AppData\Local\Programs\Python\Python35\lib\site packages\tensorflow\Python\framework\constant\u op.py”中,第102行,在常数张量util中。make_tensor_proto(value,dtype=dtype,shape=shape,verify_shape=verify_shape))文件“C:\Users\jakub\AppData\Local\Programs\Python\Python35\lib\site packages\tensorflow\Python\framework\tensor\u util.py”,make_tensor_-proto\u GetDenseDimensions(values))第379行。值错误:参数必须是密集张量:范围(2,3)-得到了形状1,但需要[]。

在处理上述异常期间,发生了另一个异常:

Traceback(最近一次调用):文件"C:\用户\jakub\OneDrive\UTP\SztucznaInteligencja\SOM\SOM2.py",第148行,在s=SOM(((3,),30,num_training,sess)文件"C:\用户\jakub\OneDrive\UTP\SztucznaInteligencja\SOM\SOM2.py",第51行,在初始化self.initialize_graph()文件"C:\用户\jakub\OneDrive\UTP\SztucznaInteligencja\SOM\SOM2.py",第76行,initialize_graphself.diff_sum=tf.reduce_sum(self.diff_sq,轴=范围(2,2 len(self.input_shape))文件"C:\用户\jakub\AppData\本地\程序\Python\Python35\lib\site-包\tenorflow\python\ops\math_ops.py",第1236行,reduce_sumname=name)文件"C:\用户\jakub\AppData\本地\程序\Python\Python35\lib\site-包\tenstorflow\python\ops\gen_math_ops.py",第2656行,_sumkeep_dims=keep_dims,name=name)File"C:\用户\jakub\AppData\本地\程序\Python\Python35\lib\site-包\tenstorflow\python\框架\op_def_library.py",第509行,在apply_op(input_name,err))值错误:尝试将reduction_indices转换为张量,但失败。错误:参数必须是密集张量:范围(2,3)-得到形状1,但想要[]。

有人知道我为什么会犯这个错误吗?

共有1个答案

山疏珂
2023-03-14

我也有同样的问题。我换了房间

self.diff_sum = tf.reduce_sum( self.diff_sq, reduction_indices=range(2,2+len(self.input_shape)) )    

self.diff_sum = tf.reduce_sum( self.diff_sq,2 )

试着让它运行。这是400次迭代后的结果:Kohonen_SOM_Colors_reduce_sum_bug

 类似资料:
  • 问题内容: 我定义这样的张量: 但是当我尝试打印张量的形状时: 我得到 Tensor(“ Shape:0”,shape =(1,),dtype = int32) ,为什么输出结果不应为shape =(100) 问题答案: tf.shape(input,name = None) 返回表示输入形状的一维整数张量。 你要找的:它返回的的变量。

  • 当尝试ViewChild时,我会得到错误。错误为“未提供'opts'的参数。” @ViewChild都给出了错误。 ts(11,2):错误TS2554:应为2个参数,但得到1。

  • 我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1 这是我制作游戏的视频:https://www.youtube.com/watch?v=FfWpgLFMI7w这里是错误: 这是我的密码:

  • 我有简单的seq2seq模型: 我正在尝试创建自己的度量标准: 如果我尝试用这个度量编译模型,我会得到一个错误“您必须为占位符张量提供一个值”,并显示以下消息: 但以下代码运行良好(不会产生任何异常): 你能解释一下那个例外是什么意思吗?我以为和在做同样的事情。我是NNs和keras的新手,所以我可能看不到一些明显的东西。我在stackoverflow上看到了类似的问题,但没有找到适合我情况的答案

  • 我想基于使用TfidfVectorizer的矢量化单词进行多标签分类(20个不同的输出标签)。我已经设置了39974行,每行包含2739个项目(0或1)。 我想使用Keras模型对这些数据进行分类,该模型将包含1个隐藏层(~ 20个节点,激活='relu'),输出层等于20个可能的输出值(激活='softmax'以选择最佳拟合)。 以下是我目前的代码: 但有错误: ValueError:检查输入时

  • 我正在做一个游戏,这里似乎有一些问题。这是我第一次使用sprite床单,如果我的错误很简单,我很抱歉。 对于大量的代码,我提前表示歉意,但不幸的是,我相信问题可能存在于代码中的任何地方。我收到的错误是“TypeError:参数1必须是pygame.Surface,而不是method”。这是指all_sprites.draw(screen)命令。我知道屏幕的格式是正确的,所以不是这样。我的老师说很可