问题描述
我正在尝试使用稀疏变分高斯过程回归器将一系列序列作为系统的输入来预测序列的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 (将#修改为@)