How to implement the arguments validation in a function correctly?
    18 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Ana Gabriela Guedes
 el 15 de Oct. de 2022
  
    
    
    
    
    Respondida: Vinayak Choyyan
    
 el 18 de Oct. de 2022
            Hello!! 
I am writing a code for neural networks where the user can choose if he wants to use a filter, how many layers, the activation functions to use, etc. I wanted to set an argument validation so the only options the user can choose are already defined.  I tried to write it this way but I always get an error. Any sugestion on how to fix it? Thank you!
The error i get is the following:
 >> Error using cell/ismember
Input A of class double and input B of class cell must be cell arrays of character vectors, unless one is a character vector.
Error in mustBeMember (line 14)
if ~all(ismember(A, B), 'all')
    Error in main (line 12)
    nLayers (2,:) double {mustBeMember(nLayers,{1,2})}
>>
function main(filter,nLayers,activFunction1,activFunction2,softmax,testOrTrain)
arguments
    filter (1,:) string {mustBeMember(filter,{'no','AM','BP'})}
    nLayers (2,:) double {mustBeMember(nLayers,{1,2})} 
    activFunction1 (3,:) string {mustBeMember(activFunction1,{'-','hardlim','purelin','logsig'})}
    activFunction2 (4,:) string {mustBeMember(activFunction2,{'hardlim','purelin','logsig'})}
    softmax (5,:) string {mustBeMember(softmax,{1,2})}
    testOrTrain (6,:) string {mustBeMember(testOrTrain,{'train','test'})}
end
... % function itself
end
0 comentarios
Respuesta aceptada
  Vinayak Choyyan
    
 el 18 de Oct. de 2022
        Hi,
As per my understanding, you are trying to use Function Argument Validation and you are getting the error you are mentioned above.
Please try the following code snippet:
function main(filter,nLayers,activFunction1,activFunction2,softmax,testOrTrain)
arguments
    filter (1,:) string {mustBeMember(filter,{'no','AM','BP'})}
    nLayers (2,:) double {mustBeMember(nLayers,[1,2])}   %change here
    activFunction1 (3,:) string {mustBeMember(activFunction1,{'-','hardlim','purelin','logsig'})}
    activFunction2 (4,:) string {mustBeMember(activFunction2,{'hardlim','purelin','logsig'})}
    softmax (5,:) double {mustBeMember(softmax,[1,2])}   %change here
    testOrTrain (6,:) string {mustBeMember(testOrTrain,{'train','test'})}
end
... % function itself
end
You were using {1,2} which creates a cell array. I believe you intended to use [1,2] which creates and array. I also changed the data type from string to double for softmax. You can read more about Function Argument Validation
and check out some examples of using mustBeMember 
0 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Deep Learning Toolbox en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

