serves as a holding site for the values to be processed; the last, or output layer, is the point at which the final state of the network can be read. Connections can only go from neurons of one layer to the neurons of the next layer. Back-propagation provides the prescription for changing the weights of any feed-forward network so that it can learn to compute a function from a set of input-output data pairs (training set). Standard back-propagation is a gradient descent technique designed to reduce the error between the actual and the desired output of the network.

Of course the interest does not lie in learning a particular training set, but in building networks that can generalize, that is behave correctly in new cases. Properly defined networks with biases, an hidden layer with sigmoid activation function, and a linear output layer are capable of approximating any function with a finite number of discontinuities. Since there are no theoretical results to help in choosing of the architecture (number of hidden layers and neurons per layer), this is usually determined either on the basis of previous experience with a given problem domain, or experimentally by a time-consuming activity of training and testing different architectures. To improve generalization, usually the training data are divided into a training and a validation set. In the training procedure, following each epoch, the performance of the network is evaluated on both the training and validation sets. As long as the network performance improves on both the data sets the learning is continued, when the error on the training set still decreases but the network shows poorer performance on the validation set the learning phase is stopped in order to avoid network overfitting of the training data.

\subsection{The neural network adopted}

We used the Matlab Neural Network Toolbox to implement the neural network. For back-propagation we applied a network training function that updates the weight and bias values according to Levenberg-Marquardt optimization and minimizes a combination of squared errors and weights to produce a network which generalizes well (Bayesian regularization). We consider as data set for the training phase, the same set of colors used for the genetic algorithm solution. The data set of 143 colors is divided into a training and a validation set, simply considering alternatively one color for one set and the successive for the other one. The network is composed by a sigmoid layer of 10 neurons and a linear output layer. The network dimension has been however arbitrarily chosen; similar configurations have been however tested and those adopted gave actually better results. In the training procedure a maximum of 100 epochs is admitted.

\section{Experiments and results}

We apply our model to describe four inkjet printers:

\begin{itemize}
\item Epson Stylus Color
\item HP 2000C
\item Epson Stylus C80
\item Epson 890
\end{itemize}

With the Epson Stylus Color and the Epson 890 we adopt a driver that employed Floyd Steinberg dithering, while for the Epson Stylus C80 and the HP 2000C, we adopt the drivers from the printer manufacturers, disabling any color management or color enhancement. Different types of papers are used (plain paper and Epson Photo Quality paper).

The characterization procedure starts with the printing and measurement of the Neugebauer primaries and the training set (Fig.~\ref{fig:figure_1}). The Neugebauer primaries are obtained by measuring the printed inks at full coverage, and their overprints, by successive prints on the same sheet. The test set consist of 777 samples, uniformly distributed in the RGB color space (Fig.~\ref{fig:figure_2}). Measurements of the spectra are executed with a Gretag Spectrolino, considering values in the wavelength range from 400 to 680 nm with a step of 40 nm. Reflectance spectra are in the range [0;100].

The results are reported in terms of color difference in CIELAB $\Delta E^*_{ab}$ and CIELAB $\Delta E^*_{94}$, hue and lightness difference, and root mean square error. In Table 3a and 3b are reported the error statistics for the genetic algorithm solution (training set and test set respectively). In Table 4a and 4b are reported the results for the neural network solution. Statistics for the training set refers to the whole set of 143 colors, comprising the training and the validation set.

\begin{figure}[t]
\centering
\includegraphics{figure_1.pdf}
\caption{Specimen for the training set and set of images to print in sequence on the same sheet for the Neugebauer primaries measurement (133 patches).}
\label{fig:figure_1}
\end{figure}