GPFlow中具有多维输入的一维输出预测-InvalidArgumentError:矩阵大小不兼容

问题描述

我正在尝试使用稀疏变分高斯过程回归器将一系列序列作为系统的输入来预测序列的48个步骤。

根据我对眼前问题的理解,损耗计算需要尺寸与矩阵相乘:

在[0]中:[预测步骤提前,预测数],在[1]中:[输入尺寸,批量]

输入单个序列以映射到新序列不会引发任何错误,因为我假设矩阵乘法接收到In [0]:[48,1],In [1]:[1,32]的兼容格式/ p>

我收到的错误如下: InvalidArgumentError:矩阵大小不兼容:In [0]:[48,1],In [1]:[21,32]

准确显示要做什么,预测21个输入功能(批处理大小为32)提前48个单步前进。

很明显,我的任务产生了数学错误

我的问题:有没有办法让我的任务在GPFlow中工作?我将如何处理?

很明显,如果我生成21个独立的48步预测,则数学运算将起作用。这是解决此问题的唯一方法吗?

堆栈跟踪或错误消息

<ipython-input-7-054dc2c4e630> in fit(self,x,y)
     36 
     37       training_loss = self.model.training_loss_closure(iter(self.train_dataset))
---> 38       self.optimizer.minimize(training_loss,self.model.trainable_variables)
     39 
     40       self.__simple_training_loop()

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in minimize(self,loss,var_list,grad_loss,name)
    373     """
    374     grads_and_vars = self._compute_gradients(
--> 375         loss,var_list=var_list,grad_loss=grad_loss)
    376 
    377     return self.apply_gradients(grads_and_vars,name=name)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py in _compute_gradients(self,grad_loss)
    427       if not callable(var_list):
    428         tape.watch(var_list)
--> 429       loss_value = loss()
    430     if callable(var_list):
    431       var_list = var_list()

/usr/local/lib/python3.6/dist-packages/gpflow/models/training_mixins.py in closure()
    108             def closure():
    109                 batch = next(data)
--> 110                 return training_loss(batch)
    111 
    112         else:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py in __call__(self,*args,**kwds)
    778       else:
    779         compiler = "nonXla"
--> 780         result = self._call(*args,**kwds)
    781 
    782       new_tracing_count = self._get_tracing_count()

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py in _call(self,**kwds)
    844               *args,**kwds)
    845       # If we did not create any variables the trace we have is good enough.
--> 846       return self._concrete_stateful_fn._filtered_call(canon_args,canon_kwds)  # pylint: disable=protected-access
    847 
    848     def fn_with_cond(*inner_args,**inner_kwds):

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py in _filtered_call(self,args,kwargs,cancellation_manager)
   1846                            resource_variable_ops.BaseResourceVariable))],1847         captured_inputs=self.captured_inputs,-> 1848         cancellation_manager=cancellation_manager)
   1849 
   1850   def _call_flat(self,captured_inputs,cancellation_manager=None):

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py in _call_flat(self,cancellation_manager)
   1931       flat_outputs = forward_function.call(
   1932           ctx,args_with_tangents,-> 1933           cancellation_manager=cancellation_manager)
   1934     else:
   1935       with default_graph._override_gradient_function(  # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py in call(self,ctx,cancellation_manager)
    548               inputs=args,549               attrs=attrs,--> 550               ctx=ctx)
    551         else:
    552           outputs = execute.execute_with_cancellation(

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name,num_outputs,inputs,attrs,name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle,device_name,op_name,---> 60                                         inputs,num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

InvalidArgumentError:  Matrix size-incompatible: In[0]: [48,1],In[1]: [21,32]
     [[node tensordot/MatMul (defined at /usr/local/lib/python3.6/dist-packages/gpflow/utilities/ops.py:104) ]] [Op:__forward_training_loss_1775]

Errors may have originated from an input operation.
Input Source operations connected to node tensordot/MatMul:
 truediv_1 (defined at /usr/local/lib/python3.6/dist-packages/gpflow/kernels/stationaries.py:50)

Function call stack:
training_loss

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...