Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
C#chevron-right

Integrando MongoDB com TensorFlow e C#

Folasayo Samuel Olayemi8 min read • Published Sep 05, 2024 • Updated Sep 05, 2024
.NETC#
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Você é um novato ou guru do C# e está interessado em saber como o Tensorflow funciona com o MongoDB como banco de dados? Este tutorial é para você.
Esse processo envolve a busca de dados do MongoDB, a realização do pré-processamento de dados e a criação de um modelo de aprendizado de máquina usando ML.NET e TensorFlow. Este guia é ideal para desenvolvedores interessados em aproveitar o poder do aprendizado de máquina em um ambiente .NET.

O que você sabe sobre o MongoDB?

O MongoDB é um banco de dadosNoSQL e ajuda você a trabalhar com grandes conjuntos de dados compartilhados. O MongoDB é um banco de dados orientado a documentos que armazena dados em documentos semelhantes a JSON. Ele permite escalabilidade e flexibilidade incomparáveis, além de todas as consultas e indexação necessárias.

O que você sabe sobre o TensorFlow?

O TensorFlow é uma plataforma end-to-end de código aberto para aprendizado de máquina desenvolvida pela equipe do GoogleBrain. Ele oferece um sistema abrangente para gerenciar todos os componentes de uma configuração de aprendizado de máquina. No entanto, este tutorial se concentra no uso de uma API específica do TensorFlow para desenvolver e treinar modelos de aprendizado de máquina. O TensorFlow opera construindo gráficos computacionais — redes de nós representando operações matemáticas, com bordas entre nós representando as arrays de dados multidimensionais (tensores) que fluem por essas operações.

Casos de uso do TensorFlow

Aqui estão alguns exemplos úteis de aplicativos do TensorFlow.
  1. Recurso de reconhecimentode imagem : o TensorFlow é utilizado em aplicativos de reconhecimento de imagem para detectar objetos, face e cenários em imagens e vídeos. Essa funcionalidade é essencial para uma variedade de aplicativos, incluindo sistemas de segurança, onde aprimora a monitoramento ao reconhecer atividades e expressões humanos, e saúde, onde ajuda no diagnóstico de condições por meio da análise de imagens médicas. Saiba mais sobre o TensorFlow para reconhecimento de imagem.
  2. Processamento de linguagem natural (NLP): a capacidade do ensorFlow de gerenciar grandes conjuntos de dados e algoritmos intrincados o torna ideal para tarefas de NLP. Ela oferece suporte a aplicativos como tradução de idiomas, análise de relacionamentos e chatbots, permitindo que as máquinas entendam, interpretem e gerem linguagem humana de uma forma contextualmente significativa. Explore os aplicativos TensorFlow no NLP.
  3. Sistemas de recomendações: Inúmeras empresas de e-commerce e streaming utilizam o TensorFlow para criar sistemas de recomendações que analisam o comportamento passado dos usuários para sugerir produtos ou mídia que eles possam considerar interessantes. Essa personalização melhora a experiência do usuário e pode aumentar significativamente as taxas de conversão para empresas. Saiba mais sobre como criar sistemas de recomendações com o TensorFlow.
  4. Documentos autônomos: o TensorFlow é utilizado na indúsria automotriz para desenvolver e melhorar sistemas para veículos autônomos. Ao processar dados de vários sensores e réplicas, os modelos baseados no TensorFlow oferecem suporte à tomada de decisões sobre a direção do veículo e a evitação de colisões. Veja como o TensorFlow é aplicado na direção autônoma.
  5. Saúde: o TensorFlow é utilizado em várias tarefas, como diagnóstico de condições e descoberta de novos métodos. Ele examina padrões de grandes conjuntos de dados de registros médicas para prever a progresso e os resultados da saúde, facilitando o diagnóstico inicial e planos de tratamento personalizados. Descubra os aplicativos TensorFlow na área de saúde.
Essas instâncias ilustram a versatilidade do TensorFlow em diferentes domínios, mostrando seu papel na geração de novidades ao transformar a forma como os dados são interpretados e utilizados na criação de aplicativos inteligentes. Cada link de instância fornecido oferece uma visão mais profunda de como o TensorFlow é usado em aplicativos do mundo real, fornecendo provas de sua ampla utilidade e impacto.

Pré-requisitos

Antes de entrarmos em detalhes, verifique se você tem o seguinte instalado:

Pacotes NuGet para instalar

Para este projeto, você precisa instalar os seguintes pacotes NuGet:
  • MongoDB.Driver: este pacote inclui tudo o que você precisa para interagir com o MongoDB, incluindo operações BSON e CRUD. Instale com dotnet add package MongoDB.Driver.
  • Microsoft.ML: este pacote é essencial para criar e treinar modelos de machine learning no .NET. Instale com dotnet add package Microsoft.ML.
  • Microsoft.ML.TensorFlow: este pacote permite a integração com modelos TensorFlow dentro do ML.NET. Instale com dotnet add package Microsoft.ML.TensorFlow.
Certifique-se de que o MongoDB esteja em execução na sua máquina local. Você pode baixar e instalar o MongoDB a partir do site.
Por fim, configure seu ambiente de desenvolvimento inicializando um novo projeto C# (Console App). Siga o guia do Visual Studio Code se você estiver codificando seu projeto de aplicativo de console C# pela primeira vez.

Detalhamento passo a passo do código

Definir esquemas e modelos

Antes de se conectar ao MongoDB, defina a estrutura dos seus dados criando classes que representam seus modelos. Essa abordagem garante que, ao interagir com o MongoDB, você esteja trabalhando com objetos fortemente digitados em vez de objetos genéricos do BsonDocument. Isso melhora a clareza do código, a manutenção e a segurança do tipo.
1using MongoDB.Bson;
2using System.Collections.Generic;
3using Microsoft.ML.Data;
4
5 public class SampleData
6 {
7 public ObjectId Id { get; set; } // This corresponds to the MongoDB _id field
8 public List<double> X { get; set; } = new List<double>();
9 public List<double> Y { get; set; } = new List<double>();
10 }
11
12 public class DataPoint
13 {
14 public float X { get; set; }
15 public float Y { get; set; }
16 }
17
18 public class Prediction
19 {
20 [ColumnName("Score")]
21 public float PredictedY { get; set; }
22 }

Conecte-se ao MongoDB

Com as classes de modelo definidas na etapa anterior, agora você pode estabelecer uma conexão com o MongoDB usando esses modelos.Em vez de usar umBsonDocumentgenérico, especifique o tipo de documentos na coleção (SampleData), tornando seu código mais intuitivo e seguro para o tipo.
Coloque o seguinte código no seu arquivoProgram.cs:
1// MongoDB connection string
2var client = new MongoClient("mongodb://localhost:27017");
3var database = client.GetDatabase("linear-data");
4var collection = database.GetCollection<SampleData>("sampleData");
Certifique-se de incluir as declaraçõesusingnecessárias na parte superior do Program.cs:
1using MongoDB.Bson;
2using MongoDB.Driver;
3using System.Collections.Generic;
Esta configuração permite que você interaja com sua coleção MongoDB utilizando modelos fortemente digitados, melhorando a legibilidade do código e a manutenção.

Criar e inserir dados de amostra

  • Dados de amostra: Primeiro, defina os dados de amostra a serem inseridos no MongoDB.
  • Inserir dados: em seguida, insira o documento definido na coleção do MongoDB.
1// Define the data to insert
2 var sampleData = new SampleData
3 {
4 X = new List<double> { 3.3, 4.4, 5.5, 6.71, 6.93, 4.168, 9.779, 6.182, 7.59, 2.167, 7.042, 10.791, 5.313, 7.997, 5.654, 9.27, 3.1 },
5 Y = new List<double> { 1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221, 2.827, 3.465, 1.65, 2.904, 2.42, 2.94, 1.3 }
6 };
7
8// Insert the data into MongoDB
9collection.InsertOne(sampleData);

Buscar dados

As etapas a seguir descrevem como recuperar e preparar dados do seu banco de dados MongoDB para usar como conjunto de dados para treinar seu modelo TensorFlow.
1// Fetch the data from MongoDB as SampleData
2var fetchedSampleData = collection.Find(new BsonDocument()).FirstOrDefault();
3
4// Assuming you have only one document, use the fetchedSampleData directly
5var xArray = fetchedSampleData.X.Select(value => (float)value).ToArray();
6var yArray = fetchedSampleData.Y.Select(value => (float)value).ToArray();
Recuperar dados: Comece recuperando os dados do MongoDB. Este código obtém o primeiro documento da coleção e pressupõe que sua configuração MongoDB contém apenas um documento que contém todo o conjunto de dados que você precisa.
Converter array BSON: depois de recuperar o documento, você precisará extrair os dados dos arrays BSON e convertê-los em arrays flutuantes. O Select método é utilizado aqui para converter cada elemento das X Y listas double e de para float. Essa conversão é crucial para a compatibilidade com o TensorFlow, que geralmente requer dados na forma de arrays flutuantes.
Essas etapas garantem que você não esteja apenas recuperando dados genéricos, mas direcionando especificamente os dados estruturados armazenados em sua coleção MongoDB. Essa configuração foi projetada para ser intuitiva para desenvolvedores novatos e experientes, fornecendo um caminho claro da recuperação de dados ao treinamento do modelo TensorFlow em um ambiente C#.

Preparando dados para ML.NET

1// Create a new ML context
2 var mlContext = new MLContext();
3
4 // Create the ML.NET data structures
5 var data = xArray.Zip(yArray, (x, y) => new DataPoint { X = x, Y = y }).ToList();
6 var dataView = mlContext.Data.LoadFromEnumerable(data);
  • Contexto de ML: Crie um novo contexto de ML.NET.
  • Estruturas de dados: carregar os dados nas estruturas de dados do ML.NET

Construir e treinar o modelo

1// Define the trainer
2var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "X" })
3 .Append(mlContext.Transforms.NormalizeMinMax("Features"))
4 .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Y", featureColumnName: "Features"));
5
6// Train the model
7var model = pipeline.Fit(dataView);
  • Definição de pipeline: defina um pipeline de aprendizado de máquina usando ML.NET.
  • Treinamento do modelo: Treine o modelo sobre os dados.

Avaliando o modelo

1// Use the model to make predictions
2var predictions = model.Transform(dataView);
3var metrics = mlContext.Regression.Evaluate(predictions, labelColumnName: "Y");
4
5Console.WriteLine($"R^2: {metrics.RSquared}");
6Console.WriteLine($"RMSE: {metrics.RootMeanSquaredError}");
  • Transformar dados: transforme os dados usando o modelo modelado.
  • Avaliar modelo: avalie o desempenho do modelo usando métricas R2 e RMSE.

Fazer projeções

1// Display the predictions
2 var predictionFunction = mlContext.Model.CreatePredictionEngine<DataPoint, Prediction>(model);
3 foreach (var point in data)
4 {
5 var prediction = predictionFunction.Predict(point);
6 Console.WriteLine($"X: {point.X}, Y: {point.Y}, Predicted: {prediction.PredictedY}");
7 }
  • Mecanismo de predição: crie um mecanismo de predição.
  • Fazer projeções: Use o mecanismo para fazer projeções e exibir os resultados.

Executando o código

  1. Certifique-se de que o MongoDB esteja em execução: inicie o MongoDB em sua máquina local.
  2. Execute o código: Execute o programa usando dotnet run.
1dotnet run

Saída esperada

A saída esperada do código C# fornecido, que semeia dados no MongoDB e depois usa o TensorFlow para realizar a regressão linear, inclui duas partes principais: uma mensagem de confirmação de que os dados foram semeados com sucesso e as métricas de avaliação do modelo de regressão linear, seguidas pelo valores previstos para cada ponto de dados.
Aqui está um detalhamento detalhado do que você deve esperar:
Confirmação de sementeira de dados A primeira mensagem de saída confirma que os dados foram semeados no MongoDB com sucesso.
1Data seeded successfully!
Métricas de avaliação do modelo O resultado inclui métricas de avaliação para o modelo de regressão linear. Essas métricas ajudam a entender o desempenho do modelo.
R-squad (R^2) Esse valor mede a proporção de variação na variável dependente que é previsível a partir da(s) variável(is) independente(s). Nesse caso, um valor de R^2 negativo de -85.09826582520343 indica que o modelo não está se ajustando bem aos dados.
1R^2: -131160.77737920854
Raiz do erro médio quadrático (RMSE) Essa métrica mede a magnitude média dos erros de predição. Um RMSE mais baixo indica um melhor ajuste do modelo. Aqui, o valor RMSE é 6.567497795652124.
1RMSE: 256.3340977791911
Previsões Para cada ponto de dados, a saída mostra os valores reais de X e Y, juntamente com o valor de Y previsto a partir do modelo de regressão linear.
1X: 3.3, Y: 1.7, Predicted: 84.26584
2X: 4.4, Y: 2.76, Predicted: -8.049469
3X: 5.5, Y: 2.09, Predicted: -100.36478
4X: 6.71, Y: 3.19, Predicted: -201.91168
5X: 6.93, Y: 1.694, Predicted: -220.3747
6X: 4.168, Y: 1.573, Predicted: 11.420654
7X: 9.779, Y: 3.366, Predicted: -459.47144
8X: 6.182, Y: 2.596, Predicted: -157.60028
9X: 7.59, Y: 2.53, Predicted: -275.76392
10X: 2.167, Y: 1.221, Predicted: 179.35062
11X: 7.042, Y: 2.827, Predicted: -229.77405
12X: 10.791, Y: 3.465, Predicted: -544.4015
13X: 5.313, Y: 1.65, Predicted: -84.6712
14X: 7.997, Y: 2.904, Predicted: -309.9206
15X: 5.654, Y: 2.42, Predicted: -113.28891
16X: 9.27, Y: 2.94, Predicted: -416.75458
17X: 3.1, Y: 1.3, Predicted: 101.050446
Esses valores mostram os valores reais de X e Y do conjunto de dados juntamente com os valores de Y previstos correspondentes. As predições ilustram como o modelo de regressão linear aproxima a relação entre X e Y. Dado o desempenho ruim indicado pelo valor de R^2 , os valores previstos podem não estar próximos dos valores de Y reais.

Resumo

  • Confirmação de sementeira de dados: confirma que os dados foram inseridos com sucesso no MongoDB.
  • Métricas de avaliação do modelo: fornece informações sobre o desempenho do modelo, indicando um ajuste ruim com um R^2 negativo e um RMSE relativamente alto.
  • Previsões: mostra os valores reais e previstos, destacando a aproximação do modelo dos dados.

Exemplo completo de saída esperada

1Data seeded successfully!
2R^2: -131160.77737920854
3RMSE: 256.3340977791911
4X: 3.3, Y: 1.7, Predicted: 84.26584
5X: 4.4, Y: 2.76, Predicted: -8.049469
6X: 5.5, Y: 2.09, Predicted: -100.36478
7X: 6.71, Y: 3.19, Predicted: -201.91168
8X: 6.93, Y: 1.694, Predicted: -220.3747
9X: 4.168, Y: 1.573, Predicted: 11.420654
10X: 9.779, Y: 3.366, Predicted: -459.47144
11X: 6.182, Y: 2.596, Predicted: -157.60028
12X: 7.59, Y: 2.53, Predicted: -275.76392
13X: 2.167, Y: 1.221, Predicted: 179.35062
14X: 7.042, Y: 2.827, Predicted: -229.77405
15X: 10.791, Y: 3.465, Predicted: -544.4015
16X: 5.313, Y: 1.65, Predicted: -84.6712
17X: 7.997, Y: 2.904, Predicted: -309.9206
18X: 5.654, Y: 2.42, Predicted: -113.28891
19X: 9.27, Y: 2.94, Predicted: -416.75458
20X: 3.1, Y: 1.3, Predicted: 101.050446
Saída do console da execução .NET mostrando a saída esperada

Conclusão

Seguindo este guia, você integrou com sucesso o MongoDB com o TensorFlow e o C# usando o ML.NET. Essa integração permite que você aproveite os recursos de armazenamento de dados do MongoDB com a poderosa framework de aprendizado de máquina TensorFlow, tudo em um ambiente .NET.
Este tutorial demonstra a facilidade com que diferentes tecnologias podem ser combinadas para criar soluções robustas de processamento de dados e aprendizado de máquina.

Apêndice

Para aprender mais, consulte a documentação doTensorFlow e doMongoDB e navegue pelosmodelos de machine learning e operações de banco de dados mais complexos. Se você tiver dúvidas ou quiser compartilhar seu trabalho, junta-se a nós na MongoDB Developer Community.
Obrigado por ler... Boa codificação!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Trabalhando com transações MongoDB com C# e .NET Framework


Sep 11, 2024 | 3 min read
Início rápido

MongoDB e C Sharp: tutorial de operações CRUD


Sep 23, 2022 | 12 min read
Tutorial

Unindo coleções no MongoDB com .NET Core e um pipeline de agregação


Feb 03, 2023 | 7 min read
Tutorial

Introdução ao Semantic Kernel da Microsoft em C# e MongoDB Atlas


Oct 10, 2024 | 10 min read
Sumário