2017-07-24 140 views
1

我有你的同樣的問題,Tensorflow, probability of predicted value?但我使用預測2,我不知道如何打印預測的百分比(置信度)。我的問題是,我可以重用你的代碼(或其中的一部分)在我的?或者如何使用pedict_proba? (我是新的Python,我需要大量的幫助)。這是我的代碼:Tensorflow,預測值的概率(ROI)

(MAIN) This one activate the predict 2 : 

import os 
import sys 
import predict_2 
import glob 
import numpy as np 
import subprocess 
from subprocess import call 
from dask.dataframe.tests.test_rolling import idx 
from sympy.tensor.indexed import Idx 
import shutil 
import tensorflow as tf 
import keras.models 
from keras.models import Sequential 
from dask.array.learn import predict 

x = [i[2] for i in os.walk('C:\\Users\\bob\\Desktop\\Bonifici\\Files\\num\\')] 
y=[] 
for t in x: 
    for f in t: 
     y.append(f) 

path = ('C:\\Users\\bob\\Desktop\\Bonifici\\Files\\num\\') 

i=0 
idx = 0 
nlist = [] 
for i in y: 
    test = subprocess.check_output('python predict_2.py ' + path + str(y[idx]),shell=True).strip() 
    idx+=1 
    print(test) 
    nlist.append(test) 
print(nlist) 

# unisce i file txt 
idx=0 

with open('C:\\Users\\bob\\Desktop\\bonifici\\Files\\CAUSALE.txt', "wb") as outfile: 
    for f in nlist: 
     outfile.write(nlist[idx]) 
     idx+=1 



outfile.close() 








This is the predict: 

    # import modules 
import sys 
import tensorflow as tf 
from PIL import Image, ImageFilter 
from PIL import Image as PImage 
import os 
from os import listdir 
import warnings 
import math 

#TOGLIE WARNING INERENTI ALLA CPU 
os.environ['TF_CPP_MIN_LOG_LEVEL']='2' 

def predictint(imvalue): 

    # Define the model (same as when creating the model file) 
    x = tf.placeholder(tf.float32, [None, 784]) 
    W = tf.Variable(tf.zeros([784, 10])) 
    b = tf.Variable(tf.zeros([10])) 

    def weight_variable(shape): 
     initial = tf.truncated_normal(shape, stddev=0.1) 
     return tf.Variable(initial) 

    def bias_variable(shape): 
     initial = tf.constant(0.1, shape=shape) 
     return tf.Variable(initial) 

    def conv2d(x, W): 
     return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

    def max_pool_2x2(x): 
     return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') 

    W_conv1 = weight_variable([5, 5, 1, 32]) 
    b_conv1 = bias_variable([32]) 

    x_image = tf.reshape(x, [-1, 28, 28, 1]) 
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) 
    h_pool1 = max_pool_2x2(h_conv1) 

    W_conv2 = weight_variable([5, 5, 32, 64]) 
    b_conv2 = bias_variable([64]) 

    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) 
    h_pool2 = max_pool_2x2(h_conv2) 

    W_fc1 = weight_variable([7 * 7 * 64, 1024]) 
    b_fc1 = bias_variable([1024]) 

    h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) 
    h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) 

    keep_prob = tf.placeholder(tf.float32) 
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 

    W_fc2 = weight_variable([1024, 10]) 
    b_fc2 = bias_variable([10]) 

    y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 

    init_op = tf.global_variables_initializer() 
    saver = tf.train.Saver() 

    with tf.Session() as sess: 
     sess.run(init_op) 
     saver.restore(sess, "model2.ckpt") 
     # print ("Model restored.") 

     prediction = tf.argmax(y_conv, 1) 

     return prediction.eval(feed_dict={x: [imvalue], keep_prob: 1.0}, session=sess) 


with warnings.catch_warnings(): 
    warnings.simplefilter("ignore", category=PendingDeprecationWarning) 

def imageprepare(argv): 

    im = Image.open(argv).convert('L') 
    width = float(im.size[0]) 
    height = float(im.size[1]) 
    newImage = Image.new('L', (28, 28), (255)) # creates white canvas of 28x28 pixels 

    if width > height: # check which dimension is bigger 
     # Width is bigger. Width becomes 20 pixels. 
     nheight = int(round((20.0/width * height), 0)) # resize height according to ratio width 
     if (nheight == 0): # rare case but minimum is 1 pixel 
      nheigth = 1 
      # resize and sharpen 
     img = im.resize((20, nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) 
     wtop = int(round(((28 - nheight)/2), 0)) # caculate horizontal pozition 
     newImage.paste(img, (4, wtop)) # paste resized image on white canvas 
    else: 
     # Height is bigger. Heigth becomes 20 pixels. 
     nwidth = int(round((20.0/height * width), 0)) # resize width according to ratio height 
     if (nwidth == 0): # rare case but minimum is 1 pixel 
      nwidth = 1 
      # resize and sharpen 
     img = im.resize((nwidth, 20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) 
     wleft = int(round(((28 - nwidth)/2), 0)) # caculate vertical pozition 
     newImage.paste(img, (wleft, 4)) # paste resized image on white canvas 

    # newImage.save("sample.png") 

    tv = list(newImage.getdata()) # get pixel values 

    # normalize pixels to 0 and 1. 0 is pure white, 1 is pure black. 
    tva = [(255 - x) * 1.0/255.0 for x in tv] 
    return tva 
    # print(tva) 

def main(argv): 

    imvalue = imageprepare(argv) 
    predint = predictint(imvalue) 
    print (predint[0]) # first value in list 

if __name__ == "__main__": 
    main(sys.argv[1])  

回答

1

我也使用這個腳本我也有同樣的問題。我解決它與此代碼:

probabilities=y_conv 
prob = probabilities.eval(feed_dict={x: [imvalue], keep_prob: 1.0}, session=sess) 
probstr = str(prob) 

這就給你這樣一個百分比:0,000007或0,12456,ecc。 數字'0,12456'表示您有12%的認可。

0

之後line prediction = tf.argmax(y_conv, 1)。添加下面的代碼

probs = tf.nn.softmax(y_conv) 
probArray = sess.run(probs, feed_dict={x: [imvalue] }) 
prob_value = probArray[0][prediction.take(0)] 
print(prob_value) 

這樣你計算tensorflow預測概率。