{"id":3412,"date":"2023-08-31T10:59:21","date_gmt":"2023-08-31T10:59:21","guid":{"rendered":"https:\/\/neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/"},"modified":"2025-11-28T10:54:36","modified_gmt":"2025-11-28T09:54:36","slug":"precision-comparison-tensorflow-pytorch-neural-designer","status":"publish","type":"blog","link":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/","title":{"rendered":"Precision of TensorFlow, PyTorch, and Neural Designer"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"3412\" class=\"elementor elementor-3412\" data-elementor-post-type=\"blog\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-193c0a3d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"193c0a3d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2c8f2dc7\" data-id=\"2c8f2dc7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-73467473 elementor-widget elementor-widget-text-editor\" data-id=\"73467473\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>This post compares the training precision of TensorFlow, PyTorch, and Neural Designer for an approximation benchmark.<\/p><section><p><a href=\"https:\/\/tensorflow.org\/\">TensorFlow<\/a>, <a href=\"https:\/\/pytorch.org\/\">PyTorch<\/a> and <a href=\"https:\/\/www.neuraldesigner.com\/\">Neural Designer<\/a>\u00a0are three popular machine learning platforms developed by\u00a0<a href=\"https:\/\/research.google\/teams\/brain\/\">Google<\/a>,\u00a0<a href=\"https:\/\/ai.facebook.com\/research\/\">Facebook<\/a> and\u00a0<a href=\"https:\/\/www.artelnics.com\/\">Artelnics<\/a>, respectively.<\/p><p>Although all those frameworks implement neural networks, they present some important differences in functionality, usability, performance, etc.<\/p><p>As we will see, the training accuracy of Neural Designer using the Levenberg-Marquardt algorithm is <b>x1.91<\/b> higher than that of TensorFlow and <b>x1.21<\/b> times higher than that of PyTorch using Adam.<\/p><p>Moreover, Neural Designer trains this neural network <b>x5.71<\/b> times faster than TensorFlow and <b>x8.21<\/b> times faster than PyTorch.<\/p><p data-start=\"50\" data-end=\"154\">In this article, we outline all the steps required to reproduce the results using Neural Designer (<a href=\"https:\/\/www.neuraldesigner.com\/downloads\/\">download<\/a>)<\/p><h3>Contents<\/h3><ul><li><a href=\"#Introduction\">Introduction<\/a>.<\/li><li><a href=\"#BenchmarkApplication\">Benchmark application<\/a>.<\/li><li><a href=\"#ReferenceComputer\">Reference computer<\/a>.<\/li><li><a href=\"#Results\">Results<\/a>.<\/li><li><a href=\"#Conclusions\">Conclusions<\/a>.<\/li><\/ul><\/section><section><h2>Introduction<\/h2><p>One of the most critical factors in machine learning platforms is their training accuracy.<\/p><p><img decoding=\"async\" style=\"width: 600px;\" src=\"https:\/\/www.neuraldesigner.com\/images\/precision-test.svg\" \/><\/p><p>This article aims to measure the training accuracies of TensorFlow, PyTorch, and Neural Designer for a benchmark application and compare the speeds obtained by those platforms.<\/p><p>The most important factor for training accuracy is the optimization algorithm used.<\/p><p>The above table shows that TensorFlow and PyTorch are programmed in C++ and Python, while Neural Designer is entirely programmed in C++.<\/p><p>Next, we measure the training accuracy for a benchmark problem on a reference computer using TensorFlow, PyTorch, and Neural Designer. We then compare the results produced by that platforms.<\/p><\/section><section><h2>Benchmark application<\/h2><p>The first step is to choose a benchmark application that is general enough to conclude the performance of the machine learning platforms. As previously stated, we will train a neural network that approximates a set of input-target samples.<\/p><p>In this regard, an approximation application comprises a data set, a neural network, and an associated training strategy.<br \/>The next table uniquely defines these three components.<\/p><div style=\"overflow-x: auto;\"><table><tbody><tr><th>Data set<br \/><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/data_set.svg\" \/><\/th><td><ul><li>Benchmark: Rosenbrock<\/li><li>Inputs number: 10<\/li><li>Targets number: 1<\/li><li>Samples number: 10000<\/li><li>File size: 2.38 MB (<a href=\" https:\/\/www.neuraldesigner.com\/files\/datasets\/R_new.rar\">download<\/a>)<\/li><\/ul><\/td><\/tr><tr><th>Neural network<br \/><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/neural_network.svg\" \/><\/th><td><ul><li>Layers number: 2<\/li><li>Layer 1:<br \/><ul style=\"list-style-type: none;\"><li>-Type: Perceptron (Dense)<\/li><li>-Inputs number: 10<\/li><li>-Neurons number: 10<\/li><li>-Activation function: Hyperbolic tangent (tanh)<\/li><\/ul><\/li><li>Layer 2:<br \/><ul style=\"list-style-type: none;\"><li>-Type: Perceptron (Dense)<\/li><li>-Inputs number: 10<\/li><li>-Neurons number: 1<\/li><li>-Activation function: Linear<\/li><\/ul><\/li><li>Initialization: Random uniform [-1,1]<\/li><\/ul><\/td><\/tr><tr><th>Training strategy<br \/><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/training_strategy.svg\" \/><\/th><td><ul><li>Loss index:<br \/><ul style=\"list-style-type: none;\"><li>-Error: Mean Squared Error (MSE)<\/li><li>-Regularization: None<\/li><\/ul><\/li><\/ul><ul><li>Optimization algorithm (TensorFlow and PyTorch):<br \/><ul style=\"list-style-type: none;\"><li>-Algorithm: Adaptive Moment Estimation (Adam)<\/li><li>-Batch size: 1000<\/li><li>-Maximum epochs: 10000<\/li><\/ul><\/li><li>Optimization algorithm (Neural Designer):<br \/><ul style=\"list-style-type: none;\"><li>-Algorithm: Levenberg-Marquardt (LM)<\/li><li>-Maximum epochs: 1000<\/li><\/ul><\/li><\/ul><\/td><\/tr><\/tbody><\/table><\/div><p>Once we have created the TensorFlow, PyTorch, and Neural Designer applications, we need to run them.<\/p><\/section><section><h2>Reference computer<\/h2><p>The next step is to choose the computer to train the neural networks with TensorFlow, PyTorch, and Neural Designer.<\/p><div style=\"overflow-x: auto;\"><table><tbody><tr><th>Operating system:<\/th><td>Windows 10 Enterprise<\/td><\/tr><tr><th>Processor:<\/th><td>CPU Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz<\/td><\/tr><tr><th>Physical RAM:<\/th><td>16.0 GB<\/td><\/tr><\/tbody><\/table><\/div><p>Once the computer has been chosen, we install TensorFlow (2.1.0), PyTorch (1.7.0), and Neural Designer (5.9.0) on it.<\/p><p><!-- HTML generated using hilite.me --><\/p><div style=\"background: #ffffff; overflow: auto; width: auto; padding: .2em .6em;\"><pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">#TENSORFLOW CODE<\/span>\n                <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">tensorflow<\/span> <span style=\"color: #008800; font-weight: bold;\">as<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">tf<\/span>\n                <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">pandas<\/span> <span style=\"color: #008800; font-weight: bold;\">as<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">pd<\/span>\n                <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">time<\/span>\n                <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">numpy<\/span> <span style=\"color: #008800; font-weight: bold;\">as<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">np<\/span>\n\t\t\t\n                <span style=\"color: #888888;\">#read data float32<\/span>\n\tstart_time <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time() \n\tfilename <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">\"C:\/R_new.csv\"<\/span>\n\tdf_test <span style=\"color: #333333;\">=<\/span> pd<span style=\"color: #333333;\">.<\/span>read_csv(filename, nrows<span style=\"color: #333333;\">=<\/span><span style=\"color: #0000dd; font-weight: bold;\">100<\/span>)\n\tfloat_cols <span style=\"color: #333333;\">=<\/span> [c <span style=\"color: #008800; font-weight: bold;\">for<\/span> c <span style=\"color: #000000; font-weight: bold;\">in<\/span> df_test <span style=\"color: #008800; font-weight: bold;\">if<\/span> df_test[c]<span style=\"color: #333333;\">.<\/span>dtype <span style=\"color: #333333;\">==<\/span> <span style=\"background-color: #fff0f0;\">\"float64\"<\/span>]\n\tfloat32_cols <span style=\"color: #333333;\">=<\/span> {c: np<span style=\"color: #333333;\">.<\/span>float32 <span style=\"color: #008800; font-weight: bold;\">for<\/span> c <span style=\"color: #000000; font-weight: bold;\">in<\/span> float_cols}\n\tdata <span style=\"color: #333333;\">=<\/span> pd<span style=\"color: #333333;\">.<\/span>read_csv(filename, engine<span style=\"color: #333333;\">=<\/span><span style=\"background-color: #fff0f0;\">'c'<\/span>, dtype<span style=\"color: #333333;\">=<\/span>float32_cols)\n                <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Loading time: \"<\/span>, <span style=\"color: #007020;\">round<\/span>(time<span style=\"color: #333333;\">.<\/span>time() <span style=\"color: #333333;\">-<\/span> start_time), <span style=\"background-color: #fff0f0;\">\" seconds\"<\/span>)\n\t\t\t\n\tx <span style=\"color: #333333;\">=<\/span> data<span style=\"color: #333333;\">.<\/span>iloc[:,:<span style=\"color: #333333;\">-<\/span><span style=\"color: #0000dd; font-weight: bold;\">1<\/span>]<span style=\"color: #333333;\">.<\/span>values\n\ty <span style=\"color: #333333;\">=<\/span> data<span style=\"color: #333333;\">.<\/span>iloc[:,[<span style=\"color: #333333;\">-<\/span><span style=\"color: #0000dd; font-weight: bold;\">1<\/span>]]<span style=\"color: #333333;\">.<\/span>values\n\t\t\t\n\tinitializer <span style=\"color: #333333;\">=<\/span> tf<span style=\"color: #333333;\">.<\/span>keras<span style=\"color: #333333;\">.<\/span>initializers<span style=\"color: #333333;\">.<\/span>RandomUniform(minval<span style=\"color: #333333;\">=-<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.<\/span>, maxval<span style=\"color: #333333;\">=<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.<\/span>)\n\t\t\t\t \n                <span style=\"color: #888888;\">#build model<\/span>\n\tmodel <span style=\"color: #333333;\">=<\/span> tf<span style=\"color: #333333;\">.<\/span>keras<span style=\"color: #333333;\">.<\/span>models<span style=\"color: #333333;\">.<\/span>Sequential([tf<span style=\"color: #333333;\">.<\/span>keras<span style=\"color: #333333;\">.<\/span>layers<span style=\"color: #333333;\">.<\/span>Dense(<span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>, \n\t\t\t\t\t\t\t\t\t    activation <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">'tanh'<\/span>, \n\t\t\t\t\t\t\t\t\t    kernel_initializer <span style=\"color: #333333;\">=<\/span> initializer, \n\t\t\t\t\t\t\t\t\t    bias_initializer<span style=\"color: #333333;\">=<\/span>initializer),\n\t\t\t\t\t\t\ttf<span style=\"color: #333333;\">.<\/span>keras<span style=\"color: #333333;\">.<\/span>layers<span style=\"color: #333333;\">.<\/span>Dense(<span style=\"color: #0000dd; font-weight: bold;\">1<\/span>, \n\t\t\t\t\t\t\t\t\t    activation <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">'linear'<\/span>, \n\t\t\t\t\t\t\t\t\t    kernel_initializer <span style=\"color: #333333;\">=<\/span> initializer, \n\t\t\t\t\t\t\t\t\t    bias_initializer<span style=\"color: #333333;\">=<\/span>initializer)])\n\t\t\t\n                <span style=\"color: #888888;\">#compile model<\/span>\n\tmodel<span style=\"color: #333333;\">.<\/span>compile(optimizer<span style=\"color: #333333;\">=<\/span><span style=\"background-color: #fff0f0;\">'adam'<\/span>, loss <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">'mean_squared_error'<\/span>)\n\t\t\t\t\t\n                <span style=\"color: #888888;\">#train model<\/span>\n\tstart_time <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time()\n\thistory <span style=\"color: #333333;\">=<\/span> model<span style=\"color: #333333;\">.<\/span>fit(x, y, batch_size <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>, epochs <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>)\n                <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Training time: \"<\/span>, <span style=\"color: #007020;\">round<\/span>(time<span style=\"color: #333333;\">.<\/span>time() <span style=\"color: #333333;\">-<\/span> start_time), <span style=\"background-color: #fff0f0;\">\" seconds\"<\/span>)\n\t\n            <\/pre><\/div><p>Building this application with PyTorch also requires some Python scripting. This code is listed below. Also, you can download <a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2025\/07\/Final_pytorch-cpu.py_.zip\">here.<\/a><\/p><div style=\"background: #ffffff; overflow: auto; width: auto; padding: .2em .6em;\"><pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #888888;\">#PYTORCH CODE\t<\/span>\n            <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">pandas<\/span> <span style=\"color: #008800; font-weight: bold;\">as<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">pd<\/span>\n            <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">time<\/span>\n            <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">torch<\/span>\n            <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">numpy<\/span> <span style=\"color: #008800; font-weight: bold;\">as<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">np<\/span>\n            <span style=\"color: #008800; font-weight: bold;\">import<\/span> <span style=\"color: #0e84b5; font-weight: bold;\">statistics<\/span>\n\t\n            <span style=\"color: #008800; font-weight: bold;\">def<\/span> <span style=\"color: #0066bb; font-weight: bold;\">init_weights<\/span>(m):\n            <span style=\"color: #008800; font-weight: bold;\">if<\/span> <span style=\"color: #007020;\">type<\/span>(m) <span style=\"color: #333333;\">==<\/span> torch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>Linear:\t\t\n\t\t\ttorch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>init<span style=\"color: #333333;\">.<\/span>uniform_(m<span style=\"color: #333333;\">.<\/span>weight, a<span style=\"color: #333333;\">=-<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.0<\/span>, b<span style=\"color: #333333;\">=<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.0<\/span>)\n\t\t\ttorch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>init<span style=\"color: #333333;\">.<\/span>uniform_(m<span style=\"color: #333333;\">.<\/span>bias<span style=\"color: #333333;\">.<\/span>data, a<span style=\"color: #333333;\">=-<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.0<\/span>, b<span style=\"color: #333333;\">=<\/span><span style=\"color: #6600ee; font-weight: bold;\">1.0<\/span>)\n\t\t\t\t\t\t\n\tepoch <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>\n\ttotal_samples, batch_size, input_variables, hidden_neurons, output_variables <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: bold;\">1000000<\/span>, <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>, <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>, <span style=\"color: #0000dd; font-weight: bold;\">1000<\/span>, <span style=\"color: #0000dd; font-weight: bold;\">1<\/span>\n\tdevice <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>device(<span style=\"background-color: #fff0f0;\">\"cuda:0\"<\/span>) \n\t\t\n            <span style=\"color: #888888;\"># read data float32<\/span>\n\tstart_time <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time()\n\tfilename <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">\"C:\/R_new.csv\"<\/span>\n\tdf_test <span style=\"color: #333333;\">=<\/span> pd<span style=\"color: #333333;\">.<\/span>read_csv(filename, nrows<span style=\"color: #333333;\">=<\/span><span style=\"color: #0000dd; font-weight: bold;\">100<\/span>)\n\tfloat_cols <span style=\"color: #333333;\">=<\/span> [c <span style=\"color: #008800; font-weight: bold;\">for<\/span> c <span style=\"color: #000000; font-weight: bold;\">in<\/span> df_test <span style=\"color: #008800; font-weight: bold;\">if<\/span> df_test[c]<span style=\"color: #333333;\">.<\/span>dtype <span style=\"color: #333333;\">==<\/span> <span style=\"background-color: #fff0f0;\">\"float64\"<\/span>]\n\tfloat32_cols <span style=\"color: #333333;\">=<\/span> {c: np<span style=\"color: #333333;\">.<\/span>float32 <span style=\"color: #008800; font-weight: bold;\">for<\/span> c <span style=\"color: #000000; font-weight: bold;\">in<\/span> float_cols}\n\tdataset <span style=\"color: #333333;\">=<\/span> pd<span style=\"color: #333333;\">.<\/span>read_csv(filename, engine<span style=\"color: #333333;\">=<\/span><span style=\"background-color: #fff0f0;\">'c'<\/span>, dtype<span style=\"color: #333333;\">=<\/span>float32_cols)\n            <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Loading time: \"<\/span>, <span style=\"color: #007020;\">round<\/span>(time<span style=\"color: #333333;\">.<\/span>time() <span style=\"color: #333333;\">-<\/span> start_time), <span style=\"background-color: #fff0f0;\">\" seconds\"<\/span>)\n\t\t\n\tx <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>tensor(dataset<span style=\"color: #333333;\">.<\/span>iloc[:,:<span style=\"color: #333333;\">-<\/span><span style=\"color: #0000dd; font-weight: bold;\">1<\/span>]<span style=\"color: #333333;\">.<\/span>values, dtype <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>float32)\n\ty <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>tensor(dataset<span style=\"color: #333333;\">.<\/span>iloc[:,[<span style=\"color: #333333;\">-<\/span><span style=\"color: #0000dd; font-weight: bold;\">1<\/span>]]<span style=\"color: #333333;\">.<\/span>values, dtype <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>float32)\n            <span style=\"color: #888888;\"># build model<\/span>\n\tmodel <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>Sequential(torch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>Linear(input_variables, hidden_neurons),\n\t\t\t\t\t\t\t\ttorch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>Tanh(),\n\t\t\t\t\t\t\t\ttorch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>Linear(hidden_neurons, output_variables))<span style=\"color: #333333;\">.<\/span>cuda()\n\t\t\n            <span style=\"color: #888888;\"># initialize weights<\/span>\n\tmodel<span style=\"color: #333333;\">.<\/span>apply(init_weights)\n\t\n            <span style=\"color: #888888;\"># compile model<\/span>\n\tlearning_rate <span style=\"color: #333333;\">=<\/span> <span style=\"color: #6600ee; font-weight: bold;\">0.001<\/span>\n\tloss_fn <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>nn<span style=\"color: #333333;\">.<\/span>MSELoss(reduction <span style=\"color: #333333;\">=<\/span> <span style=\"background-color: #fff0f0;\">'mean'<\/span>)\n\toptimizer <span style=\"color: #333333;\">=<\/span> torch<span style=\"color: #333333;\">.<\/span>optim<span style=\"color: #333333;\">.<\/span>Adam(model<span style=\"color: #333333;\">.<\/span>parameters(), lr<span style=\"color: #333333;\">=<\/span>learning_rate)\n\t\t\t \n\tindices <span style=\"color: #333333;\">=<\/span> np<span style=\"color: #333333;\">.<\/span>arange(<span style=\"color: #0000dd; font-weight: bold;\">0<\/span>,total_samples)\n\t\t\t\t\n\tstart <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time()\n\t\t\n            <span style=\"color: #008800; font-weight: bold;\">for<\/span> j <span style=\"color: #000000; font-weight: bold;\">in<\/span> <span style=\"color: #007020;\">range<\/span>(epoch):\n\t\t\t\t\t\n\t\tmse<span style=\"color: #333333;\">=<\/span>[]\n\t\t\t\t\t\n\t\tt0 <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time()\n\t\t\t\t\t\n            <span style=\"color: #008800; font-weight: bold;\">for<\/span> i <span style=\"color: #000000; font-weight: bold;\">in<\/span> <span style=\"color: #007020;\">range<\/span>(<span style=\"color: #0000dd; font-weight: bold;\">0<\/span>, total_samples, batch_size):\n\t\t\t\t\t\t\n\t\t\tbatch_indices <span style=\"color: #333333;\">=<\/span> indices[i:i<span style=\"color: #333333;\">+<\/span>batch_size]\n\t\t\t\t\t\t\n\t\t\tbatch_x, batch_y <span style=\"color: #333333;\">=<\/span> x[batch_indices], y[batch_indices]\n\t\t\t\t\t\t\n\t\t\tbatch_x <span style=\"color: #333333;\">=<\/span> batch_x<span style=\"color: #333333;\">.<\/span>cuda()\n\t\t\t\t\t\t\n\t\t\tbatch_y <span style=\"color: #333333;\">=<\/span> batch_y<span style=\"color: #333333;\">.<\/span>cuda()\n\t\t\t\t\t\t\t\t\n\t\t\toutputs <span style=\"color: #333333;\">=<\/span> model<span style=\"color: #333333;\">.<\/span>forward(batch_x)\n\t\t\t\t\t\t\t\n\t\t\tloss <span style=\"color: #333333;\">=<\/span> loss_fn(outputs, batch_y)\n\t\t\t\t\t\t\t\n\t\t\tmodel<span style=\"color: #333333;\">.<\/span>zero_grad()\n\t\t\t\t\t\t\t   \n\t\t\tloss<span style=\"color: #333333;\">.<\/span>backward()\n\t\t\t\t\t\n\t\t\toptimizer<span style=\"color: #333333;\">.<\/span>step()\n\t\t\t\t\t\t\n\t\t\tmse<span style=\"color: #333333;\">.<\/span>append(loss<span style=\"color: #333333;\">.<\/span>item())\n\t\t\t\t\t\n            <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Epoch:\"<\/span>, j<span style=\"color: #333333;\">+<\/span><span style=\"color: #0000dd; font-weight: bold;\">1<\/span>,<span style=\"background-color: #fff0f0;\">\"\/1000\"<\/span>, <span style=\"background-color: #fff0f0;\">\"[================================] - \"<\/span>,<span style=\"background-color: #fff0f0;\">\"loss: \"<\/span>, statistics<span style=\"color: #333333;\">.<\/span>mean(mse))\n\t\t\t\t\t\n\t\tt1 <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time() <span style=\"color: #333333;\">-<\/span> t0\n\t\t\t\t\t\n            <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Elapsed time: \"<\/span>, <span style=\"color: #007020;\">int<\/span>(<span style=\"color: #007020;\">round<\/span>(t1 )), <span style=\"background-color: #fff0f0;\">\"sec\"<\/span>)\n\t\t\t\t\t\n\tend <span style=\"color: #333333;\">=<\/span> time<span style=\"color: #333333;\">.<\/span>time()\n\t\t\n\telapsed <span style=\"color: #333333;\">=<\/span> end <span style=\"color: #333333;\">-<\/span> start\n\n            <span style=\"color: #008800; font-weight: bold;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Training time: \"<\/span>,<span style=\"color: #007020;\">int<\/span>(<span style=\"color: #007020;\">round<\/span>(elapsed )), <span style=\"background-color: #fff0f0;\">\"seconds\"<\/span>)\n\n        <\/pre><\/div><p>Once the TensorFlow, PyTorch, and Neural Designer applications have been created, we need to run them.<\/p><\/section><section><h2>Results<\/h2><p>The last step is to run the benchmark application on the selected machine with TensorFlow, PyTorch, and Neural Designer and compare those platforms&#8217; training times.<\/p><p>The next figure shows the training results with <b>TensorFlow<\/b>.<\/p><div style=\"overflow-x: auto;\"><table><thead><tr><th>Run<\/th><th>Time<\/th><th>MSE<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>00:47<\/td><td>0.0587<\/td><\/tr><tr><td>2<\/td><td>00:48<\/td><td>0.0582<\/td><\/tr><tr><td>3<\/td><td>00:48<\/td><td>0.0988<\/td><\/tr><tr><td>4<\/td><td>00:47<\/td><td>0.1012<\/td><\/tr><tr><td>5<\/td><td>00:47<\/td><td>0.0508<\/td><\/tr><tr><td>6<\/td><td>00:48<\/td><td>0.1008<\/td><\/tr><tr><td>7<\/td><td>00:51<\/td><td><b>0.0333<\/b><\/td><\/tr><tr><td>8<\/td><td>00:52<\/td><td>0.0998<\/td><\/tr><tr><td>9<\/td><td>00:50<\/td><td>0.0582<\/td><\/tr><tr><td>10<\/td><td>00:48<\/td><td>0.0454<\/td><\/tr><\/tbody><\/table><\/div><p>As we can see, the minimum mean squared error by TensorFlow is 0.0333, and the average mean squared error over the ten runs is 0.0705. The average training time is 48.6 seconds.<\/p><p>Similarly, the following figure is a screenshot of <b>PyTorch<\/b> at the end of the process.<\/p><div style=\"overflow-x: auto;\"><table><thead><tr><th>Run<\/th><th>Time<\/th><th>MSE<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>01:15<\/td><td>0.0294<\/td><\/tr><tr><td>2<\/td><td>01:09<\/td><td>0.0474<\/td><\/tr><tr><td>3<\/td><td>01:10<\/td><td>0.0332<\/td><\/tr><tr><td>4<\/td><td>01:08<\/td><td>0.0586<\/td><\/tr><tr><td>5<\/td><td>01:10<\/td><td><b>0.0221<\/b><\/td><\/tr><tr><td>6<\/td><td>01:09<\/td><td>0.0480<\/td><\/tr><tr><td>7<\/td><td>01:12<\/td><td>0.1006<\/td><\/tr><tr><td>8<\/td><td>01:10<\/td><td>0.0332<\/td><\/tr><tr><td>9<\/td><td>01:09<\/td><td>0.0582<\/td><\/tr><tr><td>10<\/td><td>01:06<\/td><td>0.0988<\/td><\/tr><\/tbody><\/table><\/div><p>In this case, the minimum mean squared error by PyTorch over the ten runs is 0.0221.<br \/>The average mean squared error is 0.0529. The average training time is 69.8 seconds.<\/p><p>Finally, the following figure shows the training results with <b>Neural Designer<\/b>.<\/p><div style=\"overflow-x: auto;\"><table><thead><tr><th>Run<\/th><th>Time<\/th><th>MSE<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>00:08<\/td><td>0.0196<\/td><\/tr><tr><td>2<\/td><td>00:09<\/td><td>0.0263<\/td><\/tr><tr><td>3<\/td><td>00:08<\/td><td>0.0254<\/td><\/tr><tr><td>4<\/td><td>00:09<\/td><td>0.0191<\/td><\/tr><tr><td>5<\/td><td>00:09<\/td><td>0.0413<\/td><\/tr><tr><td>6<\/td><td>00:09<\/td><td>0.0263<\/td><\/tr><tr><td>7<\/td><td>00:08<\/td><td>0.0397<\/td><\/tr><tr><td>8<\/td><td>00:08<\/td><td><b>0.0174<\/b><\/td><\/tr><tr><td>9<\/td><td>00:08<\/td><td>0.0527<\/td><\/tr><tr><td>10<\/td><td>00:09<\/td><td>0.0521<\/td><\/tr><\/tbody><\/table><\/div><p>The minimum mean squared error by Neural Designer is 0.0174. The average mean squared error over the ten runs is 0.0320.<br \/>With Neural Designer, the average training time is 8.5 seconds.<\/p><p>The following table summarizes the metrics yield by the three machine learning platforms.<\/p><div style=\"overflow-x: auto;\"><table><thead><tr><th>\u00a0<\/th><th>TensorFlow<\/th><th>PyTorch<\/th><th>Neural Designer<\/th><\/tr><\/thead><tbody><tr><th>Minimum MSE<\/th><td style=\"text-align: right;\">0.0333<\/td><td style=\"text-align: right;\">0.0221<\/td><td style=\"text-align: right;\"><b>0.0174<\/b><\/td><\/tr><tr><th>Average MSE<\/th><td style=\"text-align: right;\">0.0705<\/td><td style=\"text-align: right;\">0.0529<\/td><td style=\"text-align: right;\"><b>0.0320<\/b><\/td><\/tr><tr><th>Average training time<\/th><td style=\"text-align: right;\">48.6 seconds<\/td><td style=\"text-align: right;\">69.8 seconds<\/td><td style=\"text-align: right;\"><b>8.5 seconds<\/b><\/td><\/tr><\/tbody><\/table><\/div><p>Finally, the following chart depicts the training accuracies of TensorFlow, PyTorch, and Neural Designer for this case graphically.<\/p><p><img decoding=\"async\" style=\"width: 800px;\" src=\"https:\/\/www.neuraldesigner.com\/images\/precision-comparison.svg\" \/><\/p><p>As we can see, both the minimum and the average mean squared error of Neural Designer using the LM algorithm is smaller than that of TensorFlow and PyTorch using Adam.<\/p><p>Using these metrics, we can say that the precision of Neural Designer for this benchmark is x1.91 times bigger than that of TensorFlow and 1.27 times higher than that of PyTorch.<\/p><p>Regarding the training time, in this benchmark, Neural Designer is about x5.72 times faster than TensorFlow and x8.21 times faster than PyTorch.<\/p><\/section><section><h2>Conclusions<\/h2><p>Neural Designer implements second-order optimizers, such as the quasi-Newton method and the Levenberg-Marquardt algorithm. These algorithms have better convergence properties for small and medium-sized datasets than first-order optimizers, such as Adam.<\/p><p>This results in that, for the benchmark described in this post, the precision of Neural Designer is <b>x1.91<\/b> times faster than that of TensorFlow and <b>x1.27<\/b> times faster than that of PyTorch.<\/p><p>To reproduce these results, <a href=\"https:\/\/www.neuraldesigner.com\/downloads\/\">download\u00a0<\/a>Neural Designer and follow the steps described in this article.<\/p><\/section><section><h2>Related posts<\/h2><\/section>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"author":13,"featured_media":1679,"template":"","categories":[],"tags":[37],"class_list":["post-3412","blog","type-blog","status-publish","has-post-thumbnail","hentry","tag-platforms"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Precision of TensorFlow, PyTorch, and Neural Designer<\/title>\n<meta name=\"description\" content=\"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Precision of TensorFlow, PyTorch, and Neural Designer\" \/>\n<meta property=\"og:description\" content=\"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T09:54:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/\",\"name\":\"Precision of TensorFlow, PyTorch, and Neural Designer\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp\",\"datePublished\":\"2023-08-31T10:59:21+00:00\",\"dateModified\":\"2025-11-28T09:54:36+00:00\",\"description\":\"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp\",\"width\":1200,\"height\":627},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\/\/www.neuraldesigner.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Precision of TensorFlow, PyTorch, and Neural Designer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explanable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Precision of TensorFlow, PyTorch, and Neural Designer","description":"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/","og_locale":"en_US","og_type":"article","og_title":"Precision of TensorFlow, PyTorch, and Neural Designer","og_description":"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.","og_url":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/","og_site_name":"Neural Designer","article_modified_time":"2025-11-28T09:54:36+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/","url":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/","name":"Precision of TensorFlow, PyTorch, and Neural Designer","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp","datePublished":"2023-08-31T10:59:21+00:00","dateModified":"2025-11-28T09:54:36+00:00","description":"Compare the training precision of three popular machine learning platforms: TensorFlow, PyTorch, and Neural Designer.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/precision-comparison.webp","width":1200,"height":627},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/blog\/precision-comparison-tensorflow-pytorch-neural-designer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.neuraldesigner.com\/blog\/"},{"@type":"ListItem","position":3,"name":"Precision of TensorFlow, PyTorch, and Neural Designer"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explanable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog\/3412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/13"}],"version-history":[{"count":4,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog\/3412\/revisions"}],"predecessor-version":[{"id":22099,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog\/3412\/revisions\/22099"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media\/1679"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}