Is it possible to create a CNN with real output?

2 次查看(过去 30 天)
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

采纳的回答

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

更多回答(2 个)

Mark Fajet
Mark Fajet 2017-7-7
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 2017-7-8
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

类别

Help CenterFile Exchange 中查找有关 Image Data Workflows 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by