标签: inference

什么是Hindley-Milner?

我遇到了这个术语Hindley-Milner,我不确定是否掌握了它的含义.

我看过以下帖子:

但是维基百科中没有单一的条目,通常会给我一个简明的解释.
注意 - 现在添加了一个

它是什么?
哪些语言和工具实现或使用它?
你能提供一个简明的答案吗?

types functional-programming inference hindley-milner

121
推荐指数
3
解决办法
2万
查看次数

为什么不从构造函数推断模板参数?

今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:

template<typename obj>
class Variable {
      obj data;
      public: Variable(obj d)
              {
                   data = d;
              }
};

int main()
{
    int num = 2;
    Variable var(num); //would be equivalent to Variable<int> var(num),
    return 0;          //but actually a compile error
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我明白这是无效的,所以我的问题是为什么不是呢?允许这会产生任何重大的句法漏洞吗?是否存在不希望使用此功能的实例(推断类型会导致问题)?我只是想了解允许函数的模板推理背后的逻辑,但不适用于适当构造的类.

c++ parameters templates inference

101
推荐指数
6
解决办法
2万
查看次数

@Flow注释的含义

在Intellij IDEA 14中,有一项称为自动合同推理的功能[1].

推断的@Flow注释究竟是什么意思?

例如,对于Collection boolean addAll(Collection<? extends E> c),推断的合同是 boolean addAll(@NotNull @Flow Collection<? extends E> c).

@Flow在这种情况下意味着什么?

[1] http://blog.jetbrains.com/idea/2014/10/automatic-notnullnullablecontract-inference-in-intellij-idea-14/

java inference intellij-idea contract

15
推荐指数
1
解决办法
5676
查看次数

顺序蒙特卡罗方法(粒子滤波器)的实现

我对这里给出的简单粒子滤波算法感兴趣:http://www.aiqus.com/upfiles/PFAlgo.png看起来很简单,但我不知道如何实际做到这一点.关于如何实现它的任何想法(只是为了更好地理解它是如何工作的)?

编辑: 这是一个很好的简单示例,解释它是如何工作的:http://www.aiqus.com/questions/39942/very-simple-particle-filters-algorithm-sequential-monte-carlo-method-implementation?page= 1#39950

我试图用C++实现它:http://pastebin.com/M1q1HcN4但是我要注意我是否以正确的方式执行它.你能否检查我是否理解得很好,或者根据我的代码存在一些误解?

#include <iostream>
#include <vector>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/uniform_int_distribution.hpp>

using namespace std;
using namespace boost;

double uniform_generator(void);

#define N 4 // number of particles

#define evolutionProba_A_A 1.0/3.0 // P(X_t = A | X_t-1 = A)
#define evolutionProba_A_B 1.0/3.0 // P(X_t = A | X_t-1 = B)
#define evolutionProba_B_B 2.0/3.0 // P(X_t = B | X_t-1 = B)
#define evolutionProba_B_A 2.0/3.0 // P(X_t = …
Run Code Online (Sandbox Code Playgroud)

c++ inference probability montecarlo particle-filter

14
推荐指数
1
解决办法
2万
查看次数

如何查找冻结模型的输入和输出节点

我想optimize_for_inference.py在模型动物园的冻结模型上使用tensorflow的脚本:ssd_mobilenet_v1_coco.

如何查找/确定模型的输入和输出名称?

这是一个由tensorboard生成的图表的链接

这个问题可能会有所帮助:给定张量流模型图,如何找到输入节点和输出节点名称 (对我来说它没有)

inference tensorflow object-detection-api

13
推荐指数
2
解决办法
9044
查看次数

用于语义Web的Python工具/库:最先进的?

现在最流行的语义Web库和工具(RDF存储,推理,规则,查询)是什 从历史上看,Python工具(cwm)是最早出现的工具之一,但似乎每个人都使用Java后端来提高性能,而Python似乎只是客户端.我的目的是学习技术,如果能够证明自己完成任务,可能会在生产系统中使用.该任务尚未定义,但我认为它构建了一个知识库,与一些外部资源相关联,以及自定义的可导航的Web前端.

如果基于Python的一些构建块不够好,那么Java/C/C++ /无论什么世界都适合它.

如果有一个或两个明显的赢家,那么典​​型的筹码也是有意义的.

谢谢.

python semantic-web inference

12
推荐指数
1
解决办法
6440
查看次数

用于推理的 TensorFlow Lite C++ API 示例

我正在尝试让 TensorFlow Lite 示例在配备 ARM Cortex-A72 处理器的机器上运行。不幸的是,由于缺少有关如何使用 C++ API 的示例,我无法部署测试模型。我将尝试解释到目前为止我所取得的成就。

创建 tflite 模型

我创建了一个简单的线性回归模型并对其进行了转换,它应该近似于函数f(x) = 2x - 1。我从一些教程中得到了这个代码片段,但我再也找不到了。

import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.contrib import lite

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([ -1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([ -3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=500)

print(model.predict([10.0]))

keras_file = 'linear.h5'
keras.models.save_model(model, keras_file)

converter = lite.TocoConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
open('linear.tflite', 'wb').write(tflite_model)
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为 …

c++ inference tensorflow tensorflow-lite

12
推荐指数
2
解决办法
1万
查看次数

不使用<>调用模板函数; 类型推断

如果我有一个函数模板typename T,编译器可以自己设置类型,我在调用函数时不必显式写入类型:

template < typename T > 
T min( T v1, T v2 ) {
   return ( v1 < v2 ) ? v1: v2;
}
int i1 = 1, i2 = 2; int i3 = min( i1, i2 ); //no explicit <type> 
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个包含两个不同类型名称的函数模板,例如:

template < typename TOut, typename TIn >
TOut round( TIn v ) {
   return (TOut)( v + 0.5 );
}
double d = 1.54;
int i = round<int>(d); //explicit <int>
Run Code Online (Sandbox Code Playgroud)

我总是必须指定至少1个typename吗?我假设原因是因为C++无法区分不同返回类型之间的函数.

但是,如果我使用void函数并移交引用,我再次不能明确指定返回类型名称:

template < typename …
Run Code Online (Sandbox Code Playgroud)

c++ templates types inference

11
推荐指数
1
解决办法
2万
查看次数

Prolog初学者 - 这是一个坏主意吗?

我正在处理的应用程序是各种各样的"配置器".它是用C#编写的,我甚至编写了一个规则引擎来配合它.这个想法是有一堆命题逻辑语句,用户可以进行选择.根据他们选择的内容,其他一些项目变得必需或完全不可用.

命题逻辑语句通常采用以下形式:

A => ~X 
ABC => ~(X+Y) 
A+B => Q 
A(~(B+C)) => ~Q A <=> B
Run Code Online (Sandbox Code Playgroud)

符号:

=>  -- Implication
<=> -- Material Equivalence
~   -- Not
+   -- Or
Two letters side-by-side -- And
Run Code Online (Sandbox Code Playgroud)

我对Prolog很新,但似乎它可以为我处理所有"规则处理",允许我摆脱目前的规则引擎(它可以工作,但它不是那么快或容易按照我的意愿保持).

此外,所有可用选项都属于层次结构.例如:

Outside
   Color
      Red
      Blue
      Green
   Material
      Wood
      Metal
Run Code Online (Sandbox Code Playgroud)

如果暗示了第二级(特征,如颜色)的项目,则必须选择第三级的项目(选项,例如红色).同样,如果我们知道某个功能是假的,那么它下面的所有选项也都是假的.

问题在于每个产品都有自己的一套规则.设置包含这些运算符作为谓词的知识库是一种合理的方法,然后在运行时开始构建产品的所有规则吗?

我想象它可能会起作用的方式是建立组件,功能和选项的想法.然后设置then之间的关系(例如,如果该功能为false,则其所有选项均为false).在运行时,添加产品的特定规则.然后将所有用户的选择传递给一个函数,检索哪些项为真,哪些项为假.

我不知道我所要求的所有含义,因为我刚刚进入Prolog,但我正试图避免走上一条糟糕的道路,并在此过程中浪费大量时间.

一些问题可能有助于针对我想要找到的内容:

  1. 这听起来有效吗?
  2. 我吠叫错了树吗?
  3. 尝试在运行时创建所有这些规则有任何缺点或顾虑吗?
  4. 有没有一个更好的系统来支持这种事情,我可能会挤进一个C#应用程序(Silverlight,确切地说)?
  5. 我还应该检查其他竞争系统吗?
  6. 你对这类事有什么一般的建议吗?

提前感谢您的建议!

logic boolean-logic inference rule-engine prolog

11
推荐指数
1
解决办法
638
查看次数

在F#中的序列表达式中键入推断

我想我不太明白F#如何推断序列表达式中的类型以及为什么类型不能正确识别,即使我直接从"seq"指定了元素的类型.

在下面的F#代码中,我们有一个基类A和两个派生类,B和C:

type A(x) =
    member a.X = x

type B(x) =
    inherit A(x)

type C(x) =
    inherit A(x)
Run Code Online (Sandbox Code Playgroud)

如果我尝试用简单的序列表达式"产生"它们的实例,我会得到两个错误:

// Doesn't work, but it makes sense.
let testSeq = seq {
    yield A(0)
    yield B(1) // Error, expected type: A
    yield C(2) // Error, expected type: A
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为推断"常见"类型(界面,我认为,可以使这项工作更加困难)可能并不那么简单.但是,可以使用安全转换来修复这些错误:

// Works fine :)
let testSeqWithCast = seq {
    yield A(0)
    yield B(1) :> A
    yield C(2) :> A
}
Run Code Online (Sandbox Code Playgroud)

如果我不想使用演员怎么办?我试图直接从"seq"指定序列类型,但事情似乎不起作用:

// Should work, I think...
let testGenSeq = seq<A> …
Run Code Online (Sandbox Code Playgroud)

generics f# types inference seq

9
推荐指数
2
解决办法
520
查看次数