Is it possible to create a CNN with real output?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Benedek Racz
am 18 Apr. 2017
Beantwortet: Greg Heath
am 8 Jul. 2017
The output type of the trainNetwork() must be categorical(). How can I create a CNN with float/real output(s)?
I mean the following command gives the following error:
>> convnet = trainNetwork(input_datas, [0.0, 0.1, 0.2, 0.3], networkLayers, opts);
Error using trainNetwork>iAssertCategoricalResponseVector (line 269)
Y must be a vector of categorical responses.
(The error message corresponds the [0.0, 0.1, 0.2, 0.3] vector), But I need real outputs, not categories.
The networkLayers is the following:
>> networkLayers=
5x1 Layer array with layers:
1 '' Image Input 1x6000x1 images with 'zerocenter' normalization
2 '' Convolution 10 1x100 convolutions with stride [1 1] and padding [0 0]
3 '' Max Pooling 1x20 max pooling with stride [10 10] and padding [0 0]
4 '' Fully Connected 200 fully connected layer
5 '' Fully Connected 1 fully connected layer
0 Kommentare
Akzeptierte Antwort
Sean de Wolski
am 7 Jul. 2017
Use a regressionLayer at the end:
Note this requires 17a, regression was added in that release.
0 Kommentare
Weitere Antworten (2)
Mark Fajet
am 7 Jul. 2017
Yes it is possible, however the documentation for TrainNetwork specifies that, for classification problems, that second parameter,"Y", must be "a categorical vector containing the image labels." A simple solution would be to write:
convnet = trainNetwork(input_datas, categorical([0.0, 0.1, 0.2, 0.3]), networkLayers, opts);
Later on, when using your neural network, if you really need the responses as an array of floats instead of a categorical array, you can convert a categorical array to an array of floats like this:
d = str2double(cellstr(c)); % Where c is a categorical array
0 Kommentare
Greg Heath
am 8 Jul. 2017
The simplest way is to represent the categories with integers
>> categories = [ 1 3 5 4 2]
>> target = full(ind2vec(categories))
target = 1 0 0 0 0
0 0 0 0 1
0 1 0 0 0
0 0 0 1 0
0 0 1 0 0
>> output = target + 0.1*randn(5,5)
output = 0.8902 -0.1361 -0.0874 0.0327 -0.0846
-0.1416 0.0780 0.0415 -0.0515 0.9827
0.0060 1.0439 0.0348 -0.0896 -0.1209
-0.0411 -0.0090 0.0349 0.8797 -0.0297
-0.0368 0.1021 0.9271 0.1038 -0.3232
>> answer = vec2ind(output)
answer = 1 3 5 4 2
Hope this helps.
* Thank you for formally accepting my answer*
Greg
0 Kommentare
Siehe auch
Kategorien
Mehr zu Image Data Workflows finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!