我安装了 TensorFlow (2.3) 的最新版本,在 Python 下运行良好,但在 Golang 下却出现异常:


...但不包含包 github.com/tensorflow/tensorflow/tensorflow/go/core/protobuf/for_core_protos_go_proto


通过将版本更改为 1.15.0,我让 TensorFlow 与 Golang 一起使用


现在,我面临以下问题:


使用 TensorFlow 2.3 的 Python 代码


import tensorflow as tf

    

df = pd.read_csv(data_path, sep=';')

X = df[df.columns[:8]]

y = df[df.columns[8:-1]]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

    

model = tf.keras.Sequential()

model.add(tf.keras.layers.Dense(8, activation='relu', name="inputNode"))

model.add(tf.keras.layers.Dense(150, activation='relu'))

model.add(tf.keras.layers.Dense(3, name="inferNode"))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, y_train, epochs=500)

    

tf.keras.models.save_model(model=model, filepath='./', save_format='tf')

使用 TensorFlow 1.15.0 的 Golang 代码


model, err := tf.LoadSavedModel("./", []string{"serve"}, nil)

if err != nil {

    fmt.Printf("Error loading saved model: %s\n", err.Error())

    return

}

defer model.Session.Close()

data := [][]float32{make([]float32, 8)}

data[0][0] = 1.0

data[0][1] = 1.0

data[0][2] = 1.0

data[0][3] = 1.0

data[0][4] = 1.0

data[0][5] = 1.0

data[0][6] = 1.0

data[0][7] = 1.0

tensor, _ := tf.NewTensor(data)

   

result, err := model.Session.Run(

    map[tf.Output]*tf.Tensor{

        model.Graph.Operation("inputNode_input").Output(0): tensor, // Replace this with your input layer name

    },

    []tf.Output{

        model.Graph.Operation("inferNode").Output(0), // Replace this with your output layer name

    },

    nil,

)

    

if err != nil {

    fmt.Printf("Error running the session with input, err: %s\n", err.Error())

    return

}

    

fmt.Printf("Result value: %v \n", result[0].Value())

golang 抛出这个异常:


-- FAIL: TestMlPredict (6.93s)

panic: nil-Operation. If the Output was created with a Scope object, see Scope.Err() for details. [recovered]

    panic: nil-Operation. If the Output was created with a Scope object, see Scope.Err() for details.