ConvNetSharp
vNetSharp v0.4.14

Começou inicialmente como porto c# de convnetjs. Você pode usar o ConvnetSharp para treinar e avaliar as redes neurais convolucionais (CNN).
Muito obrigado ao autor original de ConvnetJS (Andrej Karpathy) e a todos os colaboradores!
Convnetsharp conta na biblioteca gerenciada para acesas nvidia's cuda
| Core.Layers | Flow.Layers | Gráfico de computação |
|---|---|---|
| Sem gráfico de computação | Camadas que criam um gráfico de computação por trás da cena | 'Fluxo puro' |
| Rede organizada por camadas de empilhamento | Rede organizada por camadas de empilhamento | 'Ops' conectados uns aos outros. Pode implementar redes mais complexas |
![]() | ![]() | ![]() |
| Por exemplo, mnistDemo | Por exemplo, mnistflowgpudemo ou versão de fluxo de classify2ddemo | Por exemplo, exemplos de exemplos |
Aqui está um exemplo mínimo de definir uma rede neural de duas camadas e treiná-la em um único ponto de dados:
using System ;
using ConvNetSharp . Core ;
using ConvNetSharp . Core . Layers . Double ;
using ConvNetSharp . Core . Training . Double ;
using ConvNetSharp . Volume ;
using ConvNetSharp . Volume . Double ;
namespace MinimalExample
{
internal class Program
{
private static void Main ( )
{
// specifies a 2-layer neural network with one hidden layer of 20 neurons
var net = new Net < double > ( ) ;
// input layer declares size of input. here: 2-D data
// ConvNetJS works on 3-Dimensional volumes (width, height, depth), but if you're not dealing with images
// then the first two dimensions (width, height) will always be kept at size 1
net . AddLayer ( new InputLayer ( 1 , 1 , 2 ) ) ;
// declare 20 neurons
net . AddLayer ( new FullyConnLayer ( 20 ) ) ;
// declare a ReLU (rectified linear unit non-linearity)
net . AddLayer ( new ReluLayer ( ) ) ;
// declare a fully connected layer that will be used by the softmax layer
net . AddLayer ( new FullyConnLayer ( 10 ) ) ;
// declare the linear classifier on top of the previous hidden layer
net . AddLayer ( new SoftmaxLayer ( 10 ) ) ;
// forward a random data point through the network
var x = BuilderInstance . Volume . From ( new [ ] { 0.3 , - 0.5 } , new Shape ( 2 ) ) ;
var prob = net . Forward ( x ) ;
// prob is a Volume. Volumes have a property Weights that stores the raw data, and WeightGradients that stores gradients
Console . WriteLine ( " probability that x is class 0: " + prob . Get ( 0 ) ) ; // prints e.g. 0.50101
var trainer = new SgdTrainer ( net ) { LearningRate = 0.01 , L2Decay = 0.001 } ;
trainer . Train ( x , BuilderInstance . Volume . From ( new [ ] { 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 } , new Shape ( 1 , 1 , 10 , 1 ) ) ) ; // train the network, specifying that x is class zero
var prob2 = net . Forward ( x ) ;
Console . WriteLine ( " probability that x is class 0: " + prob2 . Get ( 0 ) ) ;
// now prints 0.50374, slightly higher than previous 0.50101: the networks
// weights have been adjusted by the Trainer to give a higher probability to
// the class we trained the network with (zero)
}
}
} var net = FluentNet < double > . Create ( 24 , 24 , 1 )
. Conv ( 5 , 5 , 8 ) . Stride ( 1 ) . Pad ( 2 )
. Relu ( )
. Pool ( 2 , 2 ) . Stride ( 2 )
. Conv ( 5 , 5 , 16 ) . Stride ( 1 ) . Pad ( 2 )
. Relu ( )
. Pool ( 3 , 3 ) . Stride ( 3 )
. FullyConn ( 10 )
. Softmax ( 10 )
. Build ( ) ; Para mudar para o modo GPU:
GPU ' no espaço para nome: using ConvNetSharp.Volume. GPU .Single; ou using ConvNetSharp.Volume. Gpu .Double;BuilderInstance<float>.Volume = new ConvNetSharp.Volume.GPU.Single.VolumeBuilder(); ou BuilderInstance<double>.Volume = new ConvNetSharp.Volume.GPU.Double.VolumeBuilder(); No início do seu códigoVocê deve ter CUDA versão 10.0 e CUDNN V7.6.4 (27 de setembro de 2019), para o CUDA 10.0 instalado. Caminho da bin Cudnn deve ser referenciado na variável do ambiente do caminho.
Mnist GPU Demo aqui
using ConvNetSharp . Core . Serialization ;
[ .. . ]
// Serialize to json
var json = net . ToJson ( ) ;
// Deserialize from json
Net deserialized = SerializationExtensions . FromJson < double > ( json ) ; using ConvNetSharp . Flow . Serialization ;
[ .. . ]
// Serialize to two files: MyNetwork.graphml (graph structure) / MyNetwork.json (volume data)
net . Save ( " MyNetwork " ) ;
// Deserialize from files
var deserialized = SerializationExtensions . Load < double > ( " MyNetwork " , false ) [ 0 ] ; // first element is the network (second element is the cost if it was saved along)