danbar / fglib Goto Github PK
View Code? Open in Web Editor NEWfactor graph library
License: MIT License
factor graph library
License: MIT License
Hello,
When trying the test case (test.txt) with Gaussian variables, I receive the following error
Traceback (most recent call last):
File "npbp.py", line 31, in
belief = inference.sum_product(fg, x4)
File "/home/jdmartin86/.local/lib/python3.5/site-packages/fglib/inference.py", line 63, in sum_product
return belief_propagation(graph, query_node)
File "/home/jdmartin86/.local/lib/python3.5/site-packages/fglib/inference.py", line 42, in belief_propagation
msg = u.spa(v)
File "/home/jdmartin86/.local/lib/python3.5/site-packages/fglib/nodes.py", line 271, in spa
msg = msg.marginalize(n, normalize=False)
TypeError: marginalize() got an unexpected keyword argument 'normalize'
I just copy your code in max-product algorithm example. But I got
AttributeError: 'NoneType' object has no attribute 'normalize'.
I guess you do not initialize the value when running the max-product algorithm.
Hi~
When running make html, I was told that:
"The 'sphinx-build' command was not found. Make sure you have Sphinx
installed, then set the SPHINXBUILD environment variable to point
to the full path of the 'sphinx-build' executable. Alternatively you
may add the Sphinx directory to PATH."
How to deal with this exception?
Thanks~
like
x1 = nodes.VNode("x1", rv.Discrete([0.8, 0.2]))
Convert class Node to an abstract base class.
fg = graphs.FactorGraph()
x1 = nodes.VNode("x1", rv.Discrete)
x2 = nodes.VNode("x2", rv.Discrete)
x3 = nodes.VNode("x3", rv.Discrete)
x4 = nodes.VNode("x4", rv.Discrete)
x5 = nodes.VNode("x5", rv.Discrete)
dist_fa = [
[
[0.1, 0.2],
[0.1, 0.1]
],
[
[0.2, 0.05],
[0.2, 0.05]
]
]
fa = nodes.FNode("fa", rv.Discrete(dist_fa, x1, x2,x3))
dist_fb = [[0.1, 0.4],
[0.2, 0.3]]
fb = nodes.FNode("fb", rv.Discrete(dist_fb, x3, x4))
dist_fc = [[0.5, 0.1],
[0.2, 0.2]]
fc = nodes.FNode("fc", rv.Discrete(dist_fc, x3, x5))
fg.set_nodes([x1, x2, x3, x4, x5])
fg.set_nodes([fa,fb,fc])
fg.set_edge(x1, fa)
fg.set_edge(x2, fa)
fg.set_edge(fa, x3)
fg.set_edge(x4, fb)
fg.set_edge(fb, x3)
fg.set_edge(x3, fc)
fg.set_edge(fc, x5)
fg.set_edge(x2, fb)
fg.set_edge(fb, x3)
fg.set_edge(x2, fc)
fg.set_edge(fc, x4)
belief = inference.max_sum(fg,x5)`
for this problem I get Value assignment
x5 0
x3 1
x1 3
x2 1
x4 0
but all of the variables are binary. SO x1 = 3 does not looks right
I am trying to use the sum-product algorithm on a graph of multivariate Gaussians in information form.
I define the factors in the appropriate dimensions and get the following error:
I am not sure what exactly is not working, it seams like messages are not marginalized properly.
Can you please offer some advice?
Here is my example code:
Dear Author,
I got this error after installing this package. Can you tell me what I need to do?
`TypeError Traceback (most recent call last)
in ()
39 # Perform sum-product algorithm on factor graph
40 # and request belief of variable node x4
---> 41 belief = inference.sum_product(fg, x4)
42
43 # Print belief of variables
~\Downloads\BitBucket\python\FGlib\fglib\inference.py in sum_product(graph, query_node)
61
62 # Sum-Product algorithm is equivalent to Belief Propagation
---> 63 return belief_propagation(graph, query_node)
64
65
~\Downloads\BitBucket\python\FGlib\fglib\inference.py in belief_propagation(graph, query_node)
49
50 # Return marginal distribution
---> 51 return query_node.belief()
52
53
~\Downloads\BitBucket\python\FGlib\fglib\nodes.py in belief(self, normalize)
132
133 # Pick first node
--> 134 n = next(iterator)
135
136 # Product over all incoming messages
TypeError: 'list' object is not an iterator`
It looks like inference is not working for non-tree structures.
For example consider the following simple factor graph with nodes x1, x2, x3 and factors fa, fb, fc.
from fglib import graphs, nodes, inference, rv
# Create factor graph
fg = graphs.FactorGraph()
# Create variable nodes
x1 = nodes.VNode("x1", rv.Discrete)
x2 = nodes.VNode("x2", rv.Discrete)
x3 = nodes.VNode("x3", rv.Discrete)
# Create factor nodes (with joint distributions)
dist_fa = [[1.0, 0.0],
[0.2, 0.8]]
fa = nodes.FNode("fa", rv.Discrete(dist_fa, x1, x2))
dist_fb = [[1.0, 0.0],
[0.3, 0.7]]
fb = nodes.FNode("fb", rv.Discrete(dist_fb, x2, x3))
dist_fc = [[1.0, 0.0],
[0.4, 0.6]]
fc = nodes.FNode("fc", rv.Discrete(dist_fc, x1, x3))
# Add nodes to factor graph
fg.set_nodes([x1, x2, x3])
fg.set_nodes([fa, fb, fc])
# Add edges to factor graph
fg.set_edge(x1, fa)
fg.set_edge(fa, x2)
fg.set_edge(x2, fb)
fg.set_edge(fb, x3)
fg.set_edge(x1, fc)
fg.set_edge(fc, x3)
# Perform sum-product algorithm on factor graph
# and request belief of variable node x3
belief = inference.sum_product(fg, x3)
# Print belief of variables
print("Belief of variable node x3:")
print(belief)
The terminal output is shown below.
Traceback (most recent call last):
File "fglib_example.py", line 35, in <module>
belief = inference.sum_product(fg, x3)
File "/home/bradley/.local/lib/python3.6/site-packages/fglib/inference.py", line 63, in sum_product
return belief_propagation(graph, query_node)
File "/home/bradley/.local/lib/python3.6/site-packages/fglib/inference.py", line 42, in belief_propagation
msg = u.spa(v)
File "/home/bradley/.local/lib/python3.6/site-packages/fglib/nodes.py", line 270, in spa
msg *= self.graph[n][self]['object'].get_message(n, self)
File "/home/bradley/.local/lib/python3.6/site-packages/fglib/rv.py", line 255, in __imul__
return self.__mul__(other)
File "/home/bradley/.local/lib/python3.6/site-packages/fglib/rv.py", line 212, in __mul__
if len(self.dim) < len(other.dim):
AttributeError: 'NoneType' object has no attribute 'dim'
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.