Encog Basicmldataset

Encog BasicMLDataSet

Hello everybody,

today I want to share few words about my learning of Encog.

Let's say you have array of 15 doubles:

double []s = new double[15];

Then for simple case you can use BasciMLData class:

IMLData data = new BasicMLData(s); 

Now data can be used to feed data to any neural network. 

Next point to consider is inputting bigger values.

Suppose you want to have input as xor:
 

double [][] xorInput = 
{
   new []{0.0, 0.0},
   new []{1.0, 0.0},
   new []{0.0, 1.0},
   new []{1.0, 1.0}
};
// output
double [][] xorIdeal = 
{
   new []{0.0},
   new []{1.0},
   new []{1.0},
   new []{0.0}
};

var trainSet = new BasicMLDataSet(xorInput, xorIdeal);

Now you can use trainSet BasciMLDataSet in order to feed neural network

No Comments

Add a Comment

Normalization And Scaling In Neural Networks

Normalization and scaling in neural networks

Hello everybody.

I'm passing coursera course about neural networks.

Today I discovered for myself reason why normalization and scaling in neural networks provides faster learning. Everything is related with error surface and optimization. If to put simply 

the task of neural network is to find a global minimub at error surface. Algorithms of study of neural networks gradually move at error surface in order to finally find global minima of error

surface. Going to global minima in the circle will go faster then going to global minima in some ellipse or other kind of error surface.

Suppose we have training for neural network with two samples:

101,101 - > 2

101, 99 - > 0

Then error surface will be oval, and convergence will be relatively slow. But if to normalize data from range [99 ; 101] to range [-1; 0 ] we will gt error surface as circle, which converges much more faster.

See the picture:

The same is true for case of scaling. Let's say we have two inputs, and two outputs:

0.1, 10  -> 2

0.1, -10 -> 0.

If to scale the second part to the following look how error surface are changed:

No Comments

Add a Comment

Enable Disable Button Of Grid Or Pxtoolbarbutton Which Depends From Value Of Column In Acumatica

Enable disable button of grid or PXToolBarButton, which depends from value of column in Acumatica

Hello everybody.

My next notice is about following case. 

Suppose you have from PR301000, which has grid with id "grid" with button calculate. Also grid has column, which is bounded to column caculated, and you need the following:

If in selected row field "Calculated" is true, then disable button Calculate. If in selected row field "Calculated" is unchecked, then enable button calculate. 

In order to implement this following should be implemented:

1. In grid at page pr301000:

        <ActionBar ActionsText="True">

   <CustomItems>

                <px:PXToolBarButton Text="Calculate" DependOnGrid="grid" StateColumn="Calculated">

   <AutoCallBack Command="Calculate" Target="ds" >

                    </AutoCallBack>

   </px:PXToolBarButton>

            </CustomItems>

</ActionBar>

2. In ds section write the following:

<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" PrimaryView="PayRolls" SuspendUnloading="False" TypeName="DS.PayRollManager">

        <CallbackCommands>

            <px:PXDSCallbackCommand Name="Calculate" Visible="False" DependOnGrid="grid">

            </px:PXDSCallbackCommand>

        </CallbackCommands>

</px:PXDataSource>

3. Declaration in dac class should be the following:

#region Calculated

public abstract class calculated : PX.Data.IBqlField

{

}

protected bool? _Calculated;

[PXDBBool()]

[PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]

[PXUIField(DisplayName = "Calculated")]

public virtual bool? Calculated

{

get

{

return this._Calculated;

}

set

{

this._Calculated = value;

}

}

#endregion

after I implemented those changes button calculated taken into account field Calculated

No Comments

Add a Comment

Maintenance Pages In Acumatica

Maintenance pages in Acumatica

Hello everybody.

Here goes some my notes of Maintenance pages. 

First convention is that maintenance pages has number start of 20. For example pr203000.aspx means that it is maintenance page for pr, and I make this conclusion on basis that numbers start from 20.

As usually they are placed under manage group at sitemap and used for input of helper data, not the main.

No Comments

Add a Comment

Make Grid To Have All Screen

Make grid to have all screen

Hello everybody,

today I want to share how to make grid item to feet all container. For this purpose you just can use property AutoSize. It makes grid to feet entire area of parent container

No Comments

Add a Comment

Create Graph Instance

Create graph instance

Hello everybody,

today I want to notice how to create graph. There are two ways:

PXGraph.CreateInstance<BaseBLC>();

PXGraph.CreateInstance(typeof(BaseBLC));

If you want to get extention class, from base class, you can use following function:

GraphInstance.GetExtension<ExtentionClass>();

No Comments

Add a Comment

Fix At Least One Column In The Selected Area And Controlling Set Of Selected Columns In Acumatica

Fix at least one column in the Selected area and controlling set of selected columns in Acumatica

Hello everybody,

today  I want to share tricks related to Acumatica grids:

1.       How to fix at least one column in the Selected area so users will not be able to move it to the Available? All our custom pages have grids which can be moved.

------ You need to utilize PXGridColumn’s  AllowShowHide property set to False for not allowing user to hide for at least key column/s.

2.       How to control the default set of Selected columns for the grid so only the particular columns will be shown in the grid by default, and the rest of columns can be added by the user if necessary?

------- Grid Columns created for DAC fields marked not visible will be shown as Available column

Practical value of such fixing is that user can remove all columns, and if he does so, then grid disappear, and you'll need to dig in db in order to resurect grid on page. 

No Comments

Add a Comment

Debug Executeselect In Extentsion Graph Of Acumatica

Debug ExecuteSelect in Extentsion graph of Acumatica

Hello everybody,

today I want to share how to debug method ExecuteSelect from Base in extension class:

public delegate IEnumerable exSelectDelegate(string viewName, 
object[] parameters,

object[] searches, string[] sortcolumns, bool[] descendings,
PXFilterRow[] filters, ref int startRow, int maximumRows, ref int totalRows); [PXOverride] public IEnumerable ExecuteSelect(string viewName, object[] parameters,
object[] searches, string[]
sortcolumns, bool[] descendings,
PXFilterRow[] filters, ref int startRow, int maximumRows, ref int totalRows,
exSelectDelegate f ) { IEnumerable result = null; try { result = f(viewName, parameters, searches, sortcolumns, descendings, filters, ref startRow, maximumRows, ref totalRows); } catch (Exception ex) { // analyze exception in some way } return result; }

No Comments

Add a Comment

How To Deal With Cases When Decimal Is Not Enough

How to deal with cases when Decimal is not enough

Hello everybody,

today I want to drop a note about cases when you need high precision, and C# type decimal is not enough for your needs.

I discovered for myself GNU MP library, which has also wrapper in C#. 

Amongh feautures which this library proposes are the following:

1. High number precision, which is limited only by available memory.

2. Rish set of operators

No Comments

Add a Comment

Neural Networks Teaching

Neural Networks teaching

Hello everybody,

today I watched vidoe of Dr. James McCaffrey about traing neural netwoks. 

So, few interesting details, which was useful for me. 

1. As usually it is more then enough one hidden layer. 

2. Imagine, that you need to feed into your neural network some data. Let's say Age, income, sex, religion. For data normalization it is good to use not big numbers.

For example for Income which is around 51000 it's good to give to network 5.1 and not 51000.

For sex passing into NN it's good to use gues what? If you have an idea 0 and one, you are wrong. It's good to pass -1 and 1.

And for classfication like if you have input for example 3 different categories, the best way to pass not values like 1, 2, 3, but to pass three inputs, and pass at them 100, 010 or 001. For example if you need to code Christian, Muslim, Buddhist, you'll pass 100 for Christian, 010 for Muslim, 001 for Buddhist.

3. Four most common activation functions:

  a. logistic sigmoid

  b. hyperbolic tangent

  c. Heaviside step

  d. Softmax

4. Training algorithms for neural networks:

  a. back-propogation

  b. genetic algorithm

  c. particle swarm optimization

No Comments

Add a Comment