标签: inference

java中的前向链接和后向链接

在java中为推理过程实现前向链接和后向链接的最佳方法是什么?

我们获得了Horn形式的知识库,其中包含一系列陈述.

我试图在互联网上搜索,但我无法找到关于如何将这些人工智能概念实现到编码中的任何描述.

我的理解 :

到目前为止,我一直认为我将阅读每个句子(Horn-Form)并创建它的对象.每个Sentence类对象都有关系变量,当我要求Backward或Forward链的知识库时,它将检查这些对象的数组并构造我想要的链.

 public class Sentence{

    private String impliedBy;
    private String implementedVar;

    public Sentence(String sentence){
       String[] relation = sentence.split("=>");
       this.impliedBy = relation[0];
       this.implementedVar = relation[1];
    }
    ...
 }
Run Code Online (Sandbox Code Playgroud)

通过说...来打电话给上课

Sentence s = new Sentence("a&b=>c");
Run Code Online (Sandbox Code Playgroud)

对于这些复杂的编程而言,我是正确的道路,并且根据我的预测,我可能需要进行大量优化才能在非常高的水平上运行这些推理.但似乎我需要一些人的理解,如果你们中的一些人可以提供帮助,谢谢你......

谢谢!

java algorithm artificial-intelligence inference reasoning

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

可与 Ruby 交互的轻量级推理引擎

我有一个大型 Rub​​y 应用程序,它迫切需要添加推理引擎;我不需要很多功能,不怕集成 C 库,而且在我的谷歌搜索中空空如也。

Python 和 JVM 上似乎有很多规则引擎;虽然我更喜欢使用 Python,但我不会为了添加推理引擎而重写整个该死的应用程序,所以我真的很想看看是否存在这样的东西。

谁有想法?

ruby logic inference

5
推荐指数
1
解决办法
584
查看次数

如何在运行 Tensorflow 推理会话之前批处理多个视频帧

我做了一个项目,基本上使用谷歌对象检测 API 和张量流。

我所做的就是使用预先训练的模型进行推理:这意味着实时对象检测,其中输入是网络摄像头的视频流或使用 OpenCV 的类似内容。

现在我得到了相当不错的性能结果,但我想进一步提高 FPS。

因为我的经验是,Tensorflow 在推理时使用了我的整个内存,但 GPU 使用率根本没有达到最大值(NVIDIA GTX 1050 笔记本电脑上约为 40%,NVIDIA Jetson Tx2 上约为 6%)。

所以我的想法是通过增加每个会话运行中输入的图像批量大小来增加 GPU 使用率。

所以我的问题是:在将输入视频流的多个帧提供给之前,如何将它们一起批处理sess.run()

查看我object_detetection.py的 github 存储库上的代码:( https://github.com/GustavZ/realtime_object_detection )。

如果您能提出一些提示或代码实现,我将非常感激!

import numpy as np
import os
import six.moves.urllib as urllib
import tarfile
import tensorflow as tf
import cv2


# Protobuf Compilation (once necessary)
os.system('protoc object_detection/protos/*.proto --python_out=.')

from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util
from stuff.helper import FPS2, WebcamVideoStream

# INPUT PARAMS
# Must …
Run Code Online (Sandbox Code Playgroud)

opencv inference video-processing object-detection tensorflow

5
推荐指数
1
解决办法
3194
查看次数

在 Keras 中使用 LSTM 对时间序列进行变分自动编码器

我正在研究一个变分自动编码器 (VAE) 来检测时间序列中的异常。到目前为止,我使用了这个 tut https://blog.keras.io/building-autoencoders-in-keras.html和这个https://wiseodd.github.io/techblog/2016/12/10/variational-autoencoder/ .

不过,我在实施 VAE 时遇到了一些麻烦。我有 77093 个具有 1 维的样本。我使用 timesteps=100 进行预测。所以我重塑我的 x_train 如下:

x_train.shape = (77093, 100, 1)
Run Code Online (Sandbox Code Playgroud)

该模型:

inputs = Input(shape=(timesteps, input_dim))
encoded = LSTM(32)(inputs)

mu = Dense(1, activation='linear')(encoded)
log_sigma = Dense(1, activation='linear')(encoded)

z = Lambda(sample_z)([mu, log_sigma])

decoded = RepeatVector(timesteps)(z)
decoded = LSTM(1, return_sequences=True)(decoded)
decoded = LSTM(1)(decoded)

sequence_autoencoder = Model(inputs, decoded)
Run Code Online (Sandbox Code Playgroud)

我从以下样本中取样:

def sample_z(args):
  mu, log_sigma = args
  eps = K.random_normal(shape=(50, 1), mean=0., stddev=1.)
 return mu + K.exp(log_sigma / 2) * eps
Run Code Online (Sandbox Code Playgroud)

模型编译。但我不知道它是否正确。 …

inference autoencoder deep-learning lstm keras

5
推荐指数
1
解决办法
6669
查看次数

Typescript 推断派生类中的函数参数

我注意到在实现泛型接口(或类)并明确说明这些泛型的类型时,不会推断子类中函数的参数类型。

interface MyInterface<T> {
    open(data: T): void
}

class MyClass implements MyInterface<string> {
    open(data) {
        // Data should be string, but is any
    }
}
Run Code Online (Sandbox Code Playgroud)

当前执行此操作的正确方法如下:

open(data: string) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这迫使我多次输入类型,这似乎没有必要。以下会产生错误(这是预期的):

open(data: number) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

任何不是字符串的类型都会出错,所以编译器不应该能够推断出该类型是字符串吗?

types inference type-inference typescript

5
推荐指数
1
解决办法
698
查看次数

pytorch 中的推理时间和 TFLOPS

我目前正在研究使用 torch.autograd.profiler 使用两个不同 GPU 的不同 CNN 模型的半精度推理时间

  • Nvidia RTX 2080 Ti ( 26.90 TFLOPS ) - 在本地完成(更好的 CPU)
  • Nvidia T4 ( 65.13 TFLOPS ) - 在云端完成

令我惊讶的是 2080 Ti明显更快(时间的一半或更短),与批量大小、输入分辨率和架构无关,尽管它的 TFLOPS不到一半

有谁知道为什么?

import torch
import segmentation_models_pytorch as smp # pip install git+https://github.com/qubvel/segmentation_models.pytorch

runs = 10
res = 512
bs = 8
is_half = True

m = smp.Unet(encoder_name='resnet101', encoder_weights=None)
m.eval()
m.cuda()
m.half()

t = torch.rand((bs, 3, res, res)).cuda()
t = t.half()

if is_half:
    m.half() …
Run Code Online (Sandbox Code Playgroud)

profiler gpu inference pytorch

5
推荐指数
0
解决办法
457
查看次数

如何使用 sagemaker 对 Pandas 数据框进行预测

我正在使用 Sagemaker 来训练和部署我的机器学习模型。至于预测,它将由 lambda 函数作为预定作业(每小时)执行。过程如下:

  1. 自上次预测以来从 S3 中提取新数据
  2. 预处理、聚合和创建预测数据集
  3. 调用 sagemaker 端点并进行预测
  4. 将结果保存到 s3 或插入到数据库表

根据我的发现,通常输入将来自 lambda 有效载荷

data = json.loads(json.dumps(event))
payload = data['data']
print(payload)

response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                   ContentType='text/csv',
                                   Body=payload)
Run Code Online (Sandbox Code Playgroud)

或从 s3 文件中读取: my_bucket = resource.Bucket('pred_data') #将其替换为您的 s3 存储桶名称。

obj = client.get_object(Bucket=my_bucket, Key='foo.csv')
lines= obj['Body'].read().decode('utf-8').splitlines()
reader = csv.reader(lines)
file = io.StringIO(lines)


response = runtime.invoke_endpoint(EndpointName=ENDPOINT,
                                   ContentType='*/*',
                                   Body = file.getvalue(),
                                   Body=payload)
output = response['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

由于我将从 s3 中提取原始数据并进行预处理,pandas因此将生成一个数据帧。是否可以直接将其作为 的输入invoke_endpoint?我可以上传的数据集中汇总到另一个S3存储,但它必须要经过decodingcsv.readerStringIO和一切就像我发现还是有一个简单的方法来做到这一点的例子吗?这decode一步真的需要得到输出吗?

lambda inference pandas amazon-sagemaker

5
推荐指数
1
解决办法
770
查看次数

在 c_api 中使用 TF_GraphImportGraphDef 时,Tensorflow 2.2.0 保存的模型中的 GraphDef 无效

我通过以下方式在 Python 中的 tf 2.2.0 中保存了 keras 模型:

model.save('model', save_format='tf')
Run Code Online (Sandbox Code Playgroud)

它在“model”目录中给了我一个saved_model.pb。我想通过 c_api 进行推理,并且使用以下函数的代码: TF_LoadSessionFromSavedModel 工作正常。

int main() {
    TF_Graph *Graph = TF_NewGraph();
    TF_Status *Status = TF_NewStatus();
    TF_SessionOptions *SessionOpts = TF_NewSessionOptions();
    TF_Buffer *RunOpts = NULL;

    const char *saved_model_dir = "model/";
    const char *tags = "serve";

    int ntags = 1;
    TF_Session *Session = TF_LoadSessionFromSavedModel(SessionOpts, RunOpts, saved_model_dir, &tags, ntags, Graph, NULL, Status);

    if (TF_GetCode(Status) == TF_OK)
    {
        printf("TF_LoadSessionFromSavedModel OK\n");
    }
    else
    {
        printf("%s", TF_Message(Status));
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想通过 TF_GraphImportGraphDef 直接使用“model”目录中的 saving_model.pb,则会出现“Invalid GraphDef”错误: …

inference c-api tensorflow

5
推荐指数
0
解决办法
1022
查看次数

如何从自定义 YOLOv5 模型设置和获取置信度阈值?

我正在尝试对我的自定义 YOLOv5 模型进行推理。官方文档使用默认detect.py脚本进行推理。

例子:python detect.py --source data/images --weights yolov5s.pt --conf 0.25

我已经编写了自己的 python 脚本,但我既无法在初始化期间设置置信度阈值,也无法从模型的预测中检索它。我只能获取标签和边界框坐标。这是我的代码:

import torch

model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model='best.pt') 
results = model("my_image.png")
labels, cord_thres = results.xyxyn[0][:, -1].numpy(), results.xyxyn[0][:, :-1].numpy()
Run Code Online (Sandbox Code Playgroud)

python inference pytorch yolov5

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

从Python API而不是saved_model_cli中提取(或设置)输入/输出TF张量名称信息

我用 Keras/TF2.5 训练了一个简单的模型并将其保存为保存模型。

tf.saved_model.save(my_model,'/path/to/model')
Run Code Online (Sandbox Code Playgroud)

如果我通过检查它

saved_model_cli show --dir /path/to/model --tag_set serve --signature_def serving_default
Run Code Online (Sandbox Code Playgroud)

我得到这些输出/名称:

inputs['conv2d_input'] tensor_info:
  dtype: DT_FLOAT
  shape: (-1, 32, 32, 1)
  name: serving_default_conv2d_input:0
outputs['dense'] tensor_info:
  dtype: DT_FLOAT
  shape: (-1, 2)
  name: StatefulPartitionedCall:0
Run Code Online (Sandbox Code Playgroud)

名称serving_default_conv2d_inputStatefulPartitionedCall实际上可以用于推断。

我想使用 python API 提取它们。如果我通过加载模型来查询它:

>>> m=tf.saved_model.load('/path/to/model')
>>> m.signatures['serving_default'].inputs[0].name
'conv2d_input:0'
>>> m.signatures['serving_default'].outputs[0].name
'Identity:0'
Run Code Online (Sandbox Code Playgroud)

我得到完全不同的名字。

问题:

  1. 如何从 python API 中serving_default_conv2d_input提取这些名称?StatefulPartitionedCall
  2. 或者,当我打电话时如何定义/修复名称tf.saved_model.save
  3. 这是什么:0意思?

还有附带问题:

如何通过 SavedModel 将 TF 模型部署到生产环境?

python inference tensorflow tf.keras

5
推荐指数
1
解决办法
1456
查看次数