Is it possible to create a CNN with real output?

1 vue (au cours des 30 derniers jours)
Benedek Racz
Benedek Racz le 18 Avr 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

Réponse acceptée

Sean de Wolski
Sean de Wolski le 7 Juil 2017
Use a regressionLayer at the end:
Note this requires 17a, regression was added in that release.

Plus de réponses (2)

Mark Fajet
Mark Fajet le 7 Juil 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

Greg Heath
Greg Heath le 8 Juil 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

Catégories

En savoir plus sur Image Data Workflows dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by