Is it possible to create a CNN with real output?
1 次查看(过去 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
0 个评论
采纳的回答
Sean de Wolski
2017-7-7
Use a regressionLayer at the end:
Note this requires 17a, regression was added in that release.
0 个评论
更多回答(2 个)
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
0 个评论
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Data Workflows 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!