2017-10-23 4 views
2

Ich versuche, mein Python-Skript, das Tensorflow-Bibliothek (nicht sicher, ob es relevant ist) in Laravel verwendet. Mein Problem ist, dass ich alle Nachrichten zurück an PHP zurückgebe, nachdem ich irgendetwas mit der TF-Bibliothek gemacht habe.Tensorflow-Python-Skript in PHP laufen Laravel

Ihave folgenden versucht, Methoden ausführen

$command = 'python C:/wamp64/www/hi.py'; 
$execMethod = exec($command); 
$systemMethod = system($command); 
$shellMethod = shell_exec($command); 

Mein Python-Skript:

#!c:/Program Files/Python36/python.exe 

import os 
import urllib.request 
import tensorflow as tf 
import numpy as np 
import time 

IRIS_TRAINING = "iris_training.csv" 
IRIS_TRAINING_URL = "http://download.tensorflow.org/data/iris_training.csv" 

IRIS_TEST = "iris_test.csv" 
IRIS_TEST_URL = "http://download.tensorflow.org/data/iris_test.csv" 


def main(): 
    # If the training and test sets aren't stored locally, download them. 
    if not os.path.exists(IRIS_TRAINING): 
     raw = urllib.request.urlopen(IRIS_TRAINING_URL).read() 
     with open(IRIS_TRAINING, "wb") as f: 
      f.write(raw) 

    if not os.path.exists(IRIS_TEST): 
     raw = urllib.request.urlopen(IRIS_TEST_URL).read() 
     with open(IRIS_TEST, "wb") as f: 
      f.write(raw) 

    # Load datasets. 
    training_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TRAINING, target_dtype=np.int, 
                     features_dtype=np.float32) 
    test_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TEST, target_dtype=np.int, 
                    features_dtype=np.float32) 



    # Specify that all features have real-value data 


    feature_columns = [tf.feature_column.numeric_column("x", shape=[4])] 

    # Build 3 layer DNN with 10, 20, 10 units respectively. 
    classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, 
              hidden_units=[10, 20, 10], 
              n_classes=3, 
              model_dir="c:/wamp64/www/Laravel/resources/pythonscripts/tmp/iris_model") # Define the training inputs 
    train_input_fn = tf.estimator.inputs.numpy_input_fn(
     x={"x": np.array(training_set.data)}, 
     y=np.array(training_set.target), 
     num_epochs=None, 
     shuffle=True) 

    # Train model. 
    classifier.train(input_fn=train_input_fn, steps=1000) 

    # Define the test inputs 
    test_input_fn = tf.estimator.inputs.numpy_input_fn(
     x={"x": np.array(test_set.data)}, 
     y=np.array(test_set.target), 
     num_epochs=1, 
     shuffle=False) 

    # Evaluate accuracy. 
    accuracy_score = classifier.evaluate(input_fn=test_input_fn)["accuracy"] 
    print("\nTest Accuracy: {0:f}\n".format(accuracy_score)) 

ich die Ausgänge alle vor tf.contrib.learn.datasets.base.load_csv_with_header() erhalten, nachdem diese alle Drucke leer sind.

Ich rate mein Skript wird vollständig ausgeführt, weil es die gleiche Menge an Zeit benötigt, um die Ausgabe zu produzieren, als wenn ich es auf Apache2 ausführen, die wie erwartet funktioniert. Ich führe es von localhost/test.py

Wenn von PHP ausgeführt wird, erzeugt der Code Dateien und speichert Klassifikator wie erwartet. Ausgabe ist das Problem.

Ich werde jedes geteilte Wissen schätzen!

+0

versuchen dabei ein 'chdir (/ path/das/script/ist/in)' in PHP zuerst, weil Sie auf Dateinamen in einem relativen Pfad sind aber beziehen Pfade möglicherweise nicht passen Sie richtig an. – apokryfos

+0

Nicht funktioniert, beachten Sie, dass ich nicht ein Problem beim Ausführen der Skripts, sondern eher daraus. Ich habe auch oben das Python-Skript bearbeitet, um Ihnen eine bessere Perspektive zu geben – tensa11

Antwort

0

Das Problem war, dass die Ausgabezeichenfolge enthalten \n, die ein leeres Ergebnis produziert. Ich mein Ergebnis erreichte in einem json Rückkehr

import json 
output = [] 
output.append(item) 
print(json.dumps({i : val for (i, val) in enumerate(output)}))