You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been having a play with RandomForests with conifer, but for some reason even though I can see the tree being created and the tree details in parameters.h, my decision_function.vhd only includes one branch of the tree.
I'm using a custom dataset that I extracted from a program running in an FPGA with a RF of 1 tree with 3 layers - in reality, I would like around 100 trees with a depth of around 5, but I'm using few trees in this instance just to debug this issue.
Before running the final line, I go into "build_hls.tcl" and remove references of "-flow_target", as reported in issue #67
Synthesize the model
cnf.build(csim=False, cosim=False, export=True)
The build works and I get a message below saying "True"
In my parameters.h file, I have 7 weights, which is what I would expect to see for one tree with 3 layers, however in my decision_function.vhd file in my_prj/solution1/syn/vhdl I only have 3 weights, which makes it seem like there's only one branch being implemented.
Have you seen something like this before?
What am I doing wrong?
Thanks in advance!
The text was updated successfully, but these errors were encountered:
Good morning, I found an alternative method for implementing forest algorithms in FPGAs, so please close this thread. I would be happy to share the method for those who are interested!
Hello Community,
I've been having a play with RandomForests with conifer, but for some reason even though I can see the tree being created and the tree details in parameters.h, my decision_function.vhd only includes one branch of the tree.
I'm using a custom dataset that I extracted from a program running in an FPGA with a RF of 1 tree with 3 layers - in reality, I would like around 100 trees with a depth of around 5, but I'm using few trees in this instance just to debug this issue.
Code is below:
Load dataset and assign names
col_names = ['Row 0', 'Row 1', 'Row 2', 'Row 3', 'Row 4', 'Row 5', 'Row 6', 'Row 7', 'Row 8', 'Row 9', 'Row_Delta', 'Row_Mean', 'Row_Min', 'Row_Max', 'Row_Width', 'Col 0', 'Col 1', 'Col 2', 'Col 3', 'Col 4', 'Col 5', 'Col 6', 'Col 7', 'Col 8', 'Col 9', 'Col_Delta', 'Col_Mean', 'Col_Min', 'Col_Max', 'Col_Width', 'Label']
rs_data = pd.read_csv("/path/to/dataset/ML_Dataset_1_256_29072024.csv", header=None, names=col_names)
Assign features and target
feature_cols = ['Row 0', 'Row 1', 'Row 2', 'Row 3', 'Row 4', 'Row 5', 'Row 6', 'Row 7', 'Row 8', 'Row 9',
'Row_Delta', 'Row_Mean', 'Row_Min', 'Row_Max', 'Row_Width',
'Col 0', 'Col 1', 'Col 2', 'Col 3', 'Col 4', 'Col 5', 'Col 6', 'Col 7', 'Col 8', 'Col 9',
'Col_Delta', 'Col_Mean', 'Col_Min', 'Col_Max', 'Col_Width']
X = rs_data[feature_cols] # Features
y = rs_data.Label # Target variable
Split data
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test
Scale data
scaler = preprocessing.StandardScaler().fit(X_train_val)
X_train_val = scaler.transform(X_train_val)
X_test = scaler.transform(X_test)
Train with RandomForestClassifier
train = True
if train:
clf = RandomForestClassifier(n_estimators=1, max_depth=3, random_state=0)
clf.fit(X_train_val, y_train_val)
if not os.path.exists('ram_sniffer_rf'):
os.makedirs('ram_sniffer_rf')
joblib.dump(clf, 'ram_sniffer_rf/bdt.joblib')
else:
clf = joblib.load('ram_sniffer_rf/bdt.joblib')
Create and compile the model
cnf = conifer.converters.convert_from_sklearn(clf, cfg)
cnf.compile()
Run HLS C Simulation and get the output
y_hls = cnf.decision_function(X_test)
y_skl = clf.predict_proba(X_test)
Before running the final line, I go into "build_hls.tcl" and remove references of "-flow_target", as reported in issue #67
Synthesize the model
cnf.build(csim=False, cosim=False, export=True)
The build works and I get a message below saying "True"
In my parameters.h file, I have 7 weights, which is what I would expect to see for one tree with 3 layers, however in my decision_function.vhd file in my_prj/solution1/syn/vhdl I only have 3 weights, which makes it seem like there's only one branch being implemented.
Have you seen something like this before?
What am I doing wrong?
Thanks in advance!
The text was updated successfully, but these errors were encountered: