Thursday, November 19, 2015

MLP Neural Network with Backpropagation [MATLAB Code]

This is an implementation for Multilayer Perceptron (MLP) Feed Forward Fully Connected Neural Network with a Sigmoid activation function. The training is done using the Backpropagation algorithm with options for Resilient Gradient Descent, Momentum Backpropagation, and Learning Rate Decrease. The training stops when the Mean Square Error (MSE) reaches zero or a predefined maximum number of epochs is reached.

Four example data for training and testing are included with the project. They are generated by SharkTime Sharky Neural Network.

1- Download Code
http://www.mathworks.com/matlabcentral/fileexchange/54076-mlp-neural-network-with-backpropagation

2- Network architecture & Training Parameters:
The code configuration parameters are as follows:

1- Numbers of hidden layers and neurons per hidden layer. It’s represented by the variable nbrOfNeuronsInEachHiddenLayer. To have a neural network with 3 hidden layers with number of neurons 4, 10, and 5 respectively; that variable is set to [4 10 5].
2- Number of output layer nits. Usually the number of output units is equal to the number of classes, but it still can be less (≤ log2(nbrOfClasses)). It’s represented by the variable nbrOfOutUnits. The number of input layer units is obtained from the training samples dimension.
3- The selection if the sigmoid activation function is unipolar or polar. It’s represented by the variable unipolarBipolarSelector.
4- The learning rate η.
5- The maximum number of epochs at which the training stops unless MSE reaches zero. It’s represented by the variable nbrOfEpochs_max.
6- Option to enable or disable Momentum Backpropagation. It’s represented by the variable enable_learningRate_momentum.
7- The Momentum Backpropagation rate α. It’s represented by the variable momentum_alpha.
8- Option to enable or disable Resilient Gradient Descent. It’s represented by the variable enable_resilient_gradient_descent.
9- The Resilient Gradient Descent parametersη+η-Δmin, Δmax, represented by the variables learningRate_plus, learningRate_negative, deltas_min, and deltas_max.
10- Option to enable or disable Learning Rate Decrease. It’s represented by the variable enable_decrease_learningRate.
11- The Learning Rate Decrease parameters: and . It’s represented by the variables learningRate_decreaseValue and min_learningRate.

The code also contains a parameter for drawing the decision boundary separating the classes and the MSE curve. The number of epochs after which a figure is drawn and saved on the machine is specified. The figures are saved in a folder named Results besides the m files. This parameter is represented by the variable draw_each_nbrOfEpochs. The variable dataFileName takes the Sharky input points file name as string.

3- Results:
In all of the following four test cases, MCCR=1. The stop condition is that MSE reaches zero in all the cases. A unipolar sigmoid function is chosen.

A) Linear Points Case:
Figure 1. Network: 2-4-2 , Unipolar Sigmoid Activation, No Options, η=0.15.

B) Circle Points Case:

Figure2. Network: 2-10-2 , Unipolar Sigmoid Activation, Resilient Gradient Descent, η+=1.2, η-=0.5, Δmin=10^-6, Δmax=50.

C) Wave Points Case:
Figure 3. Network: 2-10-10-2 , Unipolar Sigmoid Activation, Resilient Gradient Descent, η+=1.2, η-=0.5, Δmin=10^-6, Δmax=50.

D) Spiral Points Case:

Figure 4. Network: 2-10-10-2 , Unipolar Sigmoid Activation, Resilient Gradient Descent, η+=1.2, η-=0.5, Δmin=10^-6, Δmax=50.

The following image shows a magnification for the decision boundary with better resolution.
Figure 5. Magnified decision boundary with better resolution for Spiral points case. 

The following video shows the solving of the Two Spirals problem.

Video 1. Solving the Two Spirals Problem.

69 comments:

王健 said...

There is something wrong for the original code. It should be added with " if i~= length(Weights)-1", for there is no redundant bias in the last weight matrix.


for i = 1:length(Weights)-1
Weights{i} = 2*rand(nbrOfNodesPerLayer(i), nbrOfNodesPerLayer(i+1))-1; %RowIndex: From Node Number, ColumnIndex: To Node Number
if i~= length(Weights)-1
Weights{i}(:,1) = 0; %Bias nodes weights with previous layer (Redundant step)
end
Delta_Weights{i} = zeros(nbrOfNodesPerLayer(i), nbrOfNodesPerLayer(i+1));
ResilientDeltas{i} = deltas_start*ones(nbrOfNodesPerLayer(i), nbrOfNodesPerLayer(i+1));
end

Hesham Eraqi said...

Hello 王健,

Many Thanks. Yes, you are right. This is a mistake.
It will always force the weights connected to the first neuron in the output layer to be zero, instead of starting from random values.

As I say in code comments, this line of code is only for convenience ("Redundant") and can be removed. However, once it's there, it should be protected with an if condition like you've did.

I have corrected the code on MathWorks File Exchange.
Thanks again,
Hesham

AbdelMonaem AbdAllah said...

Dear Hesham,

How are you ? I wish you are fine.

I'm AbdelMonaem AbdAllah, doing my PhD in UNSW @ Canberra, Australia. I'm still new in NN, so I'm wondering whether your NN can train a function, for example, squares of number of variables or it works on binary values only ?

Please, could you contact me on my e-mail, abdo_system@yahoo.com.


Thanks,
Abdo

Hesham Eraqi said...

Dear AbdelMonaem,

I'm fine, thank you. I wish you best of success with your PhD.

Simply, a neural network is a black box that understands/models the relation between some patterns (feature vectors) and their corresponding labels (classes). The understanding phase is called "training". A trained neural network is used later on to estimate the class (label) of a test pattern, this is called the "testing" or "deployment" phase.

I understand you are asking about the input vector dimensionality. My implementation is generic; it detects and works with the given input dimension whatever its length. The input vectors should be stored row by row in the "Samples" variable, and their corresponding class labels in "TargetClasses". A feature can take any number. If you need more than two output classes, you need to uncomment line 59 and implement the "To-Do" I mention in line 68. Please let me know if you have any difficulties doing it.

Best Regards, Hesham

Unknown said...
This comment has been removed by the author.
AbdelMonaem Fouad said...

Thank you Hesham for your quick reply. I'm doing PhD in optimization.

Actually, I'm wondering if you have any document that would help me in understanding the parameters that you used in your code, and how they would affect the performance of your NN.

Also, after training, how can I test a new record to be belongs to which class ?

Thanks,
AbdelMonaem

Hesham Eraqi said...

Hello AbdelMonaem,

I'm afraid that I don't have a specific reference in mind to recommend for you. Nevertheless, the parameters of the network, resilient Gradient Descent, decreasing learning rate, momentum, and epochs are widely discussed online. Have a look, and let me know if you have any specific questions.

I wish you best of luck.

siti azzahra said...

hi,,can u help me?im doing my final project on classifying TB on color features by using multilayered perceptron..n im getting confused on extracting the input and output value from an image

Hesham Eraqi said...

Hi Siti,

I wish you all the best with your final project.
I didn't get what you mean.
Inputs to MLP is your feature and output is the classification result. You should have an output neuron per class, and decide the predicted class by checking the neuron with highest activation value.

michael kim said...

Dear Hesham,

Lovely Stuff mate. Love what you have done!
Im trying to create my own code and was looking at how others have attempted it to get a general idea of how to start coding.

Just a quick question and it may seem a silly one....
but what is the difference between activation_func and activation_func_drev?
As in what does the drev stand for. I understand the function itself is different but what is the reasoning behind that?

Thank you very much

Hesham Eraqi said...

Dear Michael,

Thank you so much for the motivation :)
Very soon, I will post more interesting similar articles about different areas of machine learning.

"Drev" stands for "Derivative", that function returns the value of the derivative (gradient) of the activation function at a query point.

Best Wishes, Hesham

Narendra Chavda said...

Hey , Great work.

I am a newbie in ANN and its coding.. But from whatever i have read, this seems to be prefect generic code for "ANY" MLP feedforward network with backpropagation training algorithm. Right?


And if so then, I have generated 1570*7 excel table for my project by Matlab code. Now i want to create a network that takes 5 columns (First five natural frequencies of the structure) as input and takes remaining 2 columns (Size and location of defect) as target.

So my query is, while you have used some other input data format, and I have excel table. So how can i incorporate reading those data format instead of .points data file?

Hesham Eraqi said...

Hello Narendra,

Yes, it is a generic implementation for MLP feedforward network.

Concerning parsing the Excel data in MATLAB, there are many tutorials online for that.

In line 52, the variable 'Samples' should contain the training data, a row for each data sample. In your case it should be a matrix of 1570 rows X 5 columns.

Because, you don't have classes here; i.e. you don't have a single output neuron that should fire for each different class. You should comment the 'for' loop in line 70. And after it, fill the matrix 'TargetOutput' such that each row is the desired output for each data sample. In your case it should be a matrix of 1570 rows X 2 columns.

Also, for the above reason, your training stop criteria is different. So, comment lines 184:195 and line 198, and another code that can estimate how much the neural network is good (calculate 'MSE(Epoch)' using the 'outputs' results for each sample). 'MSE(Epoch)' should be the number of mistakenly classified samples from the neural network divided by the total number of data samples.

It you don't get any of what I mean. I'm happy to get your data and upgrade my code accordingly for you.

Best wishes, Hesham

70R50 said...
This comment has been removed by the author.
70R50 said...

Hello Hesham Eraqi,

First of all, thank you for sharing your work with us.
I'm adapting your source code for digit recognition assignment.

1. And having a problem when evaluating data, how do I calculate MSE and stop the training?
- I have 10 output neuron each for specific digit. (say 0-9)
- on %%Evaluation part outputs variable is 1by10 matrix, value 1 for corresponding digit, 0 for others. (say 5=[0 0 0 0 0 1 0 0 0 0])
- Samples is a 8000by16 matrix, 16 columns are 8 x,y coordinate pairs.( say first row [0.47 1 ... 0.98])
- TargetClasses is 8000by1 matrix, each row represents a correct digit. (say first row [5])
2. Also, assignment requirement is to use logsig activation function, should I replace Activation_func_drev with Activation_func?

Please share your idea and thoughts with me, thank you!

Hesham Eraqi said...

Hello 70R50,

1- Let's speak in terms of code, after getting 'outputs', you need to modify the next if conditions like follows:
if (isequal(outputs,[1 0 0 0 0 0 0 0 0 0]))
ActualClasses(Sample) = 0;
else if (isequal(outputs,[0 1 0 0 0 0 0 0 0 0]))
ActualClasses(Sample) = 1;
....
else if (isequal(outputs,[0 0 0 0 0 0 0 0 1 0]))
ActualClasses(Sample) = 8;
....

2- No, you should modify the function in Activation_func.m to be 'logsig' activation. Plus, modifying the function in Activation_func_drev.m to be the derivative of the 'logsig' activation. Which you should figure out for your assignment :-)

Best wishes, Hesham

Hesham Eraqi said...

@70R50: I've forgot to mention that the MSE calculation should change accordingly:
MSE(Epoch) = sum(find(ActualClasses==TargetClasses))/(length(Samples(:,1)));

freakme whatsoever said...

Hello Sir,
I am doing my final assignment on Yield forecasting using ANN. First of all, I am a newbie to NN, my background is Agriculture. I wanna ask you about my code either it is true or not.


%% load divided input data set
load annflo.mat

%% define training inputs
trainInp = [trainflo];

%% define targets
T = [targetflo];

net = newff(trainInp,T,[],{},'trainlm');
net = init(net);
net.trainParam.epochs = 1000;
net.trainParam.goal = 0.01;
net.divideParam.trainRatio = 1;
net.divideParam.valRatio = 0;
net.divideParam.testRatio = 0;

net.trainParam.max_fail = 2;
net = train(net,trainInp,T,[],[]);


%%prediction%%
Y = sim(net,trainInp);

I was using Levenberg-Marquardt as the training algorithm, but then I realized that It was supposed to be Back-propagation as the training algorithm and I had no idea how to change the code. Would you like to help me, Sir?
Thank you :)

mahum pervez said...

Helllo..
I am new to NN.Can the following code be used for time series prediction?
What modification do i have to do?

ChathuraW said...

Hi Hesham,

I'm trying to adapt your code for 4 inputs and 2 output neurons(no classes). I read your comment given to Narendra. I'm struggling with the evaluation part of the code. Can you please help me out.

Thank you :)

Really Nice work Hesham. Good luck with all your work.

Best Regards

Chathura

Hesham Eraqi said...

@freakme whatsoever:
Hello,
You are using MATLAB Neural Network Toolbox. Sorry, I don't have it. But there is a nice example for you here: http://www.mathworks.com/help/nnet/examples/wine-classification.html

Good luck, and I'm here for any questions if you use my code.

Hesham Eraqi said...

@mahum pervez:
Yes NN can solve the series prediction problem. I've uploaded an image for you that summarizes the idea: https://s8.postimg.org/mqn8q82fp/image.png
Good Luck.

Hesham Eraqi said...

@Chathura: Hi, Thanks for your nice words. Sorry for late replay.
You can simply replace the evaluation code from line 184 to line 195 with this line of code:

[~,ActualClasses(Sample)] = max(outputs) - 1;

Good Luck :)

Milad M said...

Dear Hesam
First of all I want to thank for this awesome and clean MLP implementation
I have a question about my case which doesn't work very well I have 400 samples with 20 features which divided to 3 classes. I almost done all of your advises for changing code base on other questions and comments but in my case code works till 99 epochs and after that this errors comes out!could you please help me?

thanks

Error using *
Inner matrix dimensions must agree.

Error in EvaluateNetwork (line 7)
NodesActivations{Layer} = NodesActivations{Layer-1}*Weights{Layer-1};

Error in MLP_NN (line 228)
outputs = EvaluateNetwork([1 x y], NodesActivations, Weights, unipolarBipolarSelector);

Hesham Eraqi said...

Thank you Milad for your nice words, glad it's useful.

You are right, this is because my visualization code only supports problems with 2 features only. But in your case, it's 20.
You have to options to proceed:
- Comment the visualization code section, or set the variable draw_each_nbrOfEpochs to a large number like 10^9, so that visualization won't occur.
- Try to do PCA on your features to reduce them to 2 features, this will make training much faster and visualization feasible. You may even end up with better classification performance (depending on the variance in your features).

Eve said...

Hi Hesham,

I have a classification problem which is to classify the music genres for more than 50,000 songs. Here, I have 10 genres. I've been studying your code for several days and I also read your comment about the multiply outputs problem. But I still cannot figure out how to construct the outputs. The actual labels for the 10 genres are [1,2,...,10]. And I construct a matrix for all the samples with their corresponding labels:
[1 0 0 0 0 0 0 0 0 0;
1 0 0 0 0 0 0 0 0 0;
0 1 0 0 0 0 0 0 0 0;
...
0 0 0 0 0 0 0 0 0 1];

Here [1 0 0 0 0 0 0 0 0 0] means the label for the sample point is 1 and [0 0 0 0 0 0 0 0 0 1] means the label for this sample point is 10, etc.

The followings are your code:
-------------------------------------------------------------------------
%% Read Data
importedData = importdata(dataFileName, '\t', 6);
Samples = importedData.data(:, 1:length(importedData.data(1,:))-1);
TargetClasses = importedData.data(:, length(importedData.data(1,:)));
TargetClasses = TargetClasses - min(TargetClasses);
ActualClasses = -1*ones(size(TargetClasses));
------------------------------------------------------------------------

Problem 1: Do I still needs the above code to construct the TargetClasses and the ActualClasses?
Problem 2: What are the TargetClasses and the ActualClasses in my case?

Thank you!
Eve

Hesham Eraqi said...

Hi Eve,

Problem 1: No you won't need that code. Replace it by other code that fills the variables 'Samples', 'TaggetClasses', and 'ActualClasses'.
Please note that the variable 'Samples' should contain your training data, a row for each data sample.

Problem 2: 'TaggetClasses' is the labels matrix you have constructed as you describe above.
'ActualClasses' at that moment is a variable of the same size as 'TaggetClasses'. It is just for allocation, so you can put zeros or any numbers for now. Later on in the "Evaluation" code section, it should be filled with the neural network output for all the samples. You should modify that section as I described in a previous comment.

If it still have problems, I will be happy to upgrade my code if you send me sample of your data via email maybe: hesham.eraqi@gmail.com

Good luck.

Kris said...

Dear Hesham Eraqi,

can I use your code as classifier ?

As I understand the data there are:
Samples - training data,
TargetClassess - labels for training data (classess).

Where (which variable) can I store the testing data ?
And, how to read a final (predicted) labels of such data ?

regards,
Kris

Paolo Rampazzo said...

Hi! Congratulations for your code. I'm using it to approximate a function. It's more or less like this: I have five inputs and one output that is the price of a commodity. And I want the Neural Network to learn these prices and give me prices on new five inputs that it hasn't been taught. So I think it is only one output. Ok ? If I just reduce the number of output in your code to one, will it work to approximate the function ?
And another doubt, why do you subtract from the Target Classes its minimum ?
Thank you very much!

Paolo Rampazzo said...

Just to let you know what changes I have made to your code in order to get the nn to calculate an output only (value of a function). I started by changing the number of outputs to one, and importing my data. My data have six input variables and one output. As my target output is a price, I normalized it to be between 0 and 1 with the min max normalization. So my targetclasses are just my prices normalized. Besides, the targetoutputs now, as I guess, must be the same as the targetclasses, because there are no classes at all. So it must be the value of the output itself, that is what I want my nn to evaluate given the inputs. As for the evaluation, I just commented all the stuff that has to do with the actualclasses and inserted in ActuallClasses(sample) = output. After that I commented the visualization part that has not to do with the error. It won't work with this changes becaue the evaluation is evaluating the same value for all my training set. What have I forgot doing ?

Unknown said...

Hi der..I need matlab code for ( training back propagation algorithm ) for wind forecasting....plz rpy to diz mail dhivyagovindasamy27@gmail.com

PRANA said...

Dear Hesham Eraqi

sir,
i'm doing finial year research in university. i'm doing "landslide susceptibility analysis" using ANN back-propagation method, problem is i have 10 input data(images,numerically ) for 1 landslide like wise i have 8 land slide data. Now i wanted create network for finding land slide susceptible.
Can you provided ideas with code.(i'm try to do this with the mathlab)

syafiq said...

Hello Hesham Eraqi,

Good work from you. However, I found that the code only for training. How do you test your data? And if by getting MSE close to 0, how you ensure that your model is not overfitting?

thanks
Syafiq

Aptron said...

Matlab is the best technology at Learning New things. Appreciable blog on Matlab Course

Ankit Kumar said...

Usually I never comment on blogs but your article is so convincing that I never stop myself to say something about it. You’re doing a great job Man,Keep it up.
Matlab Training in Noida

Mahesh said...

Really very informative and creative contents. This concept is a good way to enhance the knowledge.
thanks for sharing. please keep it up.

MATLAB training in gurgaon

Vimal kannan said...

Thank you for the clear explanation. Keep post it.

Matlab Course in Chennai
Matlab Training in Chennai

Hesham Eraqi said...

Christian Sanchez commented on your file MLP Neural Network with Backpropagation :
Hi ,
I am trying to understand backpropagation, and your code is being really helpful, thanks.

I have got a question: your input to the derivative of the sigmoid is "NodesActivations", which has previously gone through the sigmoid function. I do not understand this, shouldnt it be input to the derivative of the sigmoid the input to the activation function? Obviously no, because your code works, but could you help me please to understand this ?
Input to activation function: s
Output from activation function: z=f(s )
Derivative: d/dw z=d/dw f(s) = f(s)(1-f(s))

while in the code it looks like f(z)(1-f(z)) is calculated, because you do :
Line 111-->NodesActivations{Layer} = Activation_func(NodesActivations{Layer}, unipolarBipolarSelector );
and
Line 121-->gradient = Activation_func_drev(NodesActivations{Layer+1}, unipolarBipolarSelector);

-------------------------

@Christian Sanchez:
You are absolutely correct; to get the derivative of a function you need the input to it (not the output) to substitute with. But if that function is a Sigmoid (which is our case) you can use a beautiful feature that allows calculating the derivative using the output. I've provided the proof in this post: http://heraqi.blogspot.com/2018/07/sigmoid-derivative.html

ravinna said...

Nice blog and good information.


Matlab Training in Chennai | Matlab Training Institute in Chennai

Radha Sai said...

Nice post.Keep updating Artificial intelligence Online Trining

Revathy A said...

Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
angularjs Training in bangalore

angularjs Training in bangalore

angularjs online Training

angularjs Training in marathahalli

angularjs interview questions and answers

simbu said...

Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging

Java interview questions and answers

Java training in Chennai | Java training institute in Chennai | Java course in Chennai

thulasi ragini said...

I found this informative and interesting blog so i think so its very useful and knowledge able.I would like to thank you for the efforts you have made in writing this article.
python training in rajajinagar
Python training in bangalore
Python training in usa

kevin antony said...

This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.

rpa training in chennai
rpa training in bangalore
rpa course in bangalore
best rpa training in bangalore
rpa online training

Nila shri said...

Nice post. By reading your blog, i get inspired and this provides some useful information. Thank you for posting this exclusive post for our vision. 
Data Science training in Chennai | Data Science Training Institute in Chennai
Data science training in Bangalore | Data Science Training institute in Bangalore
Data science training in pune | Data Science training institute in Pune
Data science online training | online Data Science certification Training-Gangboard
Data Science Interview questions and answers

johnsy sai said...

The knowledge of technology you have been sharing thorough this post is very much helpful to develop new idea. here by i also want to share this.
Best Devops Training in pune
excel advanced excel training in bangalore
Devops Training in Chennai

vijay antony said...

I am really happy with your blog because your article is very unique and powerful for new reader.
Click here:
selenium training in chennai | selenium course in chennai
selenium training in bangalore | selenium course in bangalore
selenium training in Pune | selenium course in pune | selenium class in pune
selenium training in Pune | selenium course in pune | selenium class in pune
selenium online training | selenium training online | online training on selenium


Xplore IT Corp said...

Hey Nice Blog!! Thanks For Sharing!!!Wonderful blog & good post.Its really helpful for me, waiting for a more new post. Keep Blogging!
embedded course in coimbatore
IT security training in coimbatore

Shiv Kumar said...

Nice Blog, very informative.
Cloud Computing Training in Noida

Praylin S said...

Great post! This is really worth reading. Keep sharing more such posts.

Embedded System Course Chennai
Embedded Training in Chennai
Oracle Training in Chennai
Oracle Training institute in chennai
Tally Course in Chennai
Tally Classes in Chennai
Embedded Training in Porur
Embedded Training in Adyar

Unknown said...

MATLAB has advanced over a time of years with contribution from numerous clients. In college conditions, it is the standard instructional device for early on and propelled courses in arithmetic, designing, and science. In industry, MATLAB is the instrument of decision for high-efficiency research, improvement, and examination.

https://samyakinfotech.com/training/electrical-electronics/matlab-training-course/

Manisha singh said...

Its a wonderful post and very helpful, thanks for all this information. You are including better information.
Matlab Training in Noida

Matlab Training institute in Noida


creative web solution said...

Are you looking for a maid for your home to care your baby,patient care taker, cook service or a japa maid for your pregnent wife we are allso providing maid to take care of your old parents.we are the best and cheapest service provider in delhi for more info visit our site and get all info.

maid service provider in South Delhi
maid service provider in Dwarka
maid service provider in Gurgaon
maid service provider in Paschim Vihar
cook service provider in Paschim Vihar
cook service provider in Dwarka
cook service provider in south Delhi
baby care service provider in Delhi NCR
baby care service provider in Gurgaon
baby care service provider in Dwarka
baby service provider in south Delhi
servant service provider in Delhi NCR
servant service provider in Paschim Vihar
servant Service provider in South Delhi
japa maid service in Paschim Vihar
japa maid service in Delhi NCR
japa maid service in Dwarka
japa maid service in south Delhi
patient care service in Paschim Vihar
patient care service in Delhi NCR
patient care service in Dwarka
Patient care service in south Delhi

Ranikamala said...


Very good post.
All the ways that you suggested to find a new post was very good.
Keep doing posting and thanks for sharing.11:38 AM 9/10/2018
Get MATLAB Projects, MATLAB Assignment help, MATLAB homework help, MATLAB Project Help, MATLAB Solutions from real-time experts and trainers. Access instant MATLAB training in Hyderabad and get MATLAB projects and solutions
Matlab Training in hyderabad

Aditi Digital Solutions said...

nice information on data science has given thank you very much.
Data Science Training in Hyderabad

LifeVoxel.AI said...

LifeVoxel.AI has developed a Interactive Streaming and AI Platform for medical imaging using GPU clusters cloud computing. It is a leap in cloud technology platform in medical imaging that encompasses use cases in visualization, AI, image management and workflow. It’s approach is unique that it has been granted 12 International patents. LifeVoxel.AI’s platform is certified for HIPAA compliancy. The platform was granted an FDA 510K approval for use in diagnostic interpretation of medical images.

Interactive Streaming AI Platform RIS PACS

verdure skills india pvt ltd said...

nice blog
get best placement at VSIPL

get digital marketing services
seo network point

educational blogs said...

Please continue this great work and I look forward to more of your awesome posts.

Data Science in-house Corporate training in Nigeria

Anonymous said...

nice blog
training and placement

institute in Bhopal -:VSIPL


best digital marketing

and web devleopment company in Bhopal -: seo network point

goms said...

Thanks for sharing the good post.
Machine Learning training in Pallikranai Chennai
Machine Learning training in Medavakkam Chennai"
Pytorch training in Pallikaranai chennai
Data science training in Medavakkam Chennai"

janathan said...

very useful comment..
foreach loop in node js
ywy cable
javascript integer max value
adder and subtractor using op amp
"c program to find frequency of a word in a string"
on selling an article for rs 1020, a merchant loses 15%. for how much price should he sell the article to gain 12% on it ?
paramatrix interview questions
why you consider yourself suitable for the position applied for

Vijaykumar said...

very usefull comment...
Inplant Training in Chennai
Iot Internship
Internship in Chennai for CSE
Internship in Chennai
Python Internship in Chennai
Implant Training in Chennai
Android Training in Chennai
R Programming Training in Chennai
Python Internship
Internship in chennai for EEE

saishree said...

awesome blog.
Industrial training for electronics and communication engineering students
Summer internship for ece students
Internship in bangalore for computer science students
Internships in bangalore for cse students 2019
Internship
Internship in kerala
Internship in chennai for eee with stipend
Internship in chandigarh for cse
Ethical hacking internship in chennai
Architecture firms in chennai for internship

saishree said...

great.
Acceptance is to offer what a

lighted

A reduction of 20 in the price of salt
Power bi resumes
Qdxm:sfyn::uioz:?
If 10^0.3010 = 2, then find the value of log0.125 (125) ?
A dishonest dealer professes to sell his goods at cost price

but still gets 20% profit by using a false weight. what weight does he substitute for a kilogram?

Oops concepts in c# pdf
Resume for bca freshers
Attempt by security transparent method

'webmatrix.webdata.preapplicationstartcode.start()' to access security critical method 'system.web.webpages.razor.webpagerazorhost.addglobalimport(system.string)' failed.

Node js foreach loop

hema said...

Nice Blog..

cse internship in hyderabad
companies for industrial visit in chennai for cse students
winter internship for mechanical engineering students
internship training in bangalore
ece internships in bangalore
free internship in chennai for mechanical engineering students
internship with stipend for ece
ai internship in chennai
internship certificate for mechanical engineering students
internships in chennai for ece students

hema said...

Good..

how to hack with crosh
javascript integer max
apply css to iframe content
given signs signify something and on that basis assume the given statement to be true
zeus learning aptitude paper for software testing
how to hack wifi hotspot on android
she most of her time tomusic
unexpected token o in json at position 1
ywy
javascript sort array of objects by key value

sanashree said...

nice blog.
Internship for mba
Internships in chennai for cse students
Robotics training
Ccna certification in chennai
Industrial training for diploma ece students in hyderabad
Internship certificate for bba student
Internships in bangalore for ece
Internship
Inplant training report
Internship in coimbatore for eee

sanashree said...

great blog.
Complaint letter to bank for deduction
Cisco aci interview questions
Type 2 coordination chart l&t
Mccb selection formula
Given signs signify something and on that basis assume the given statement
Adder and subtractor using op amp theory
Power bi resume for 3 years experience
Power bi resume for experience
Php developer resume for 2 year experience
Ayfy cable



LifeVoxel.AI said...

Towards a single natural solution for global illumination:
- GPUs 15 TFLOPS with improved branching
- Denoising using AI for real-time path-tracing
- Optimized early ray termination
- Voxel representation of geometry
- Auto Reflections
- Auto Shadows
- Auto Ambient Occlusions

Realism is what drives GPU advancement.

Imagine GPUs use outside of cinematic and gaming use cases.

LifeVoxel.AI has built a visualization and AI platform using GPUs in the cloud used in diagnostic-quality views for mission-critical care just using a web browser. This patented innovation is recognized by Frost and Sullivan, NSF and NIH (13 patents).

RIS PACS
RIS PACS software