neo4j-graph-analytics / ml-models

Machine Learning Procedures and Functions for Neo4j
https://github.com/neo4j-graph-analytics/ml-models/releases/tag/1.0.0
Apache License 2.0
64 stars 23 forks source link

DeepGL Invalid shape error #4

Open tomasonjo opened 5 years ago

tomasonjo commented 5 years ago

Load data.

:play movies

Run algorithm:

CALL embedding.deepgl("Person" ,null)

I get an error:

Neo.ClientError.Procedure.ProcedureCallFailed: Failed to invoke procedure embedding.deepgl: Caused by: org.nd4j.linalg.exception.ND4JIllegalStateException: Invalid shape: Requested INDArray shape [0, 54] contains dimension size values < 1 (all dimensions must be 1 or more)

mneedham commented 5 years ago

This happens if it can't build a graph between the Nodes/Rels specified. With the default graph Person nodes are not connected to Person nodes so we get that error. We should make it throw a better exception.

Tomposon commented 5 years ago

I have place the follow the step provided in github to couple deepgl,but when I call embedding.deepgl it say there is no such procedure @mneedham @tomasonjo

tomasonjo commented 5 years ago

Did you add in the Neo4j.conf file


dbms.security.procedures.whitelist= embedding.*
dbms.security.procedures.unrestricted= embedding.*
Tomposon commented 5 years ago

I add dbms.security.procedures.whitelist=regression., embedding. in the Neo4j.conf file.Procedure regression can work well,but embedding can't @tomasonjo

Tomposon commented 5 years ago

@tomasonjo I have try it many times.But it is sad that regression model can work but embedding can't.How did you install this?

mneedham commented 5 years ago

I think your file should read like this:

dbms.security.procedures.whitelist= embedding.*,regression.*
dbms.security.procedures.unrestricted= embedding.*,regression.*

If you have that and regression is working and embedding isn't...then maybe you have an earlier release when embedding wasn't there yet?

Tomposon commented 5 years ago

I have try your advice,but the result is the same as the previous result that regression can but embedding cannot.My installed neo4j is the latest version neo4j-community-3.4.8.Could you tell me why.I really want to use the deepgl to do network representation learning. @mneedham

Tomposon commented 5 years ago

@mneedham I downloaded 3rd Release: DeepGL.It should have include the embedding.I don't know why it can't work well

mneedham commented 5 years ago

@Tomposon Maybe try without spaces for those config settings? I have it running like this:

dbms.security.procedures.unrestricted=algo.*,embedding.*
dbms.security.procedures.whitelist=embedding.*
mgalusza commented 4 years ago

Hi, I face same issue. I have the latest neo4j-community-3.5.5 and the latest neo4j-ml-models-1.0.3.jar. Have config neo4j.conf properly reading the jar and I can execute embedding. I have created movie graph and tried:

CALL embedding.deepgl("Person" ,null)

Go the error: Neo.ClientError.Procedure.ProcedureCallFailed: Failed to invoke procedure embedding.deepgl: Caused by: org.nd4j.linalg.exception.ND4JIllegalStateException: Invalid shape: Requested INDArray shape [0, 54] contains dimension size values < 1 (all dimensions must be 1 or more)

The graph structure does not link Person to Person directly but via Movies.

EDIT: I recreated whole Graph from scratch and run the following:

CALL embedding.deepgl("Person" ,'ACTED_IN', {nodeFeatures: ["Movie","Person"]}) CALL embedding.deepgl("Person" ,'ACTED_IN', {nodeFeatures: ["Movie"]})

Same error. I wonder if my understading of DeepWalk is correct then. I assumed that it was not required for nodes to be in direct neighbourhood to derive embbedding for them. Is that correct?