2017-02-23 8 views
0

Ich versuche einen stochastischen Gradientenabstiegscode, den ich im Tensorfluss gemacht habe, zu trainieren und 25112 Bilder ähnlich dem MINST-Datensatz zu trainieren (die Dateien sehen genau aus mag ich). Ich entschuldige mich, wenn dies ein einfaches Problem ist, aber ich bin unsicher, wie es weitergehen soll. Vielen Dank!ValueError: alle Eingabearrays müssen die gleiche Anzahl von Dimensionen haben - für Tensorflow Manual MSINT

Ich laufe in diesen Fehler:

"Valueerror: alle Eingabefelder gleiche Anzahl von Dimensionen haben müssen"

Auf dieser Codezeile:

x = np.c_ [ np.ones (n), image_tensor2] # line75

Und ich kann nicht feststellen, warum das nicht funktioniert - ich denke, es ist etwas mit dem zu tun hat, wie ich in den Bilddateien gelesen habe, aber ich kann nicht sicher sein. Hier ist mein Code

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import argparse 

#load the images in order 
vector = [] #initialize the vector 

filenames = tf.train.match_filenames_once("train_data/*.jpg") 
filename_queue = tf.train.string_input_producer(filenames) 

image_reader = tf.WholeFileReader() 
_, image_file = image_reader.read(filename_queue) 
image_orig = tf.image.decode_jpeg(image_file) 
image = tf.image.resize_images(image_orig, [28, 28]) 
image.set_shape((28, 28, 3)) 
images = tf.image.decode_jpeg(image_file) 
with tf.Session() as sess: 
    tf.global_variables_initializer().run() 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 
    image_tensor = sess.run([images]) 
    #print(image_tensor) 
    #coord.request_stop() 
    #coord.join(threads) 

image_tensor2 = np.array(image_tensor) 
n_samples = image_tensor2.shape[0] 
lossHistory=[] 
ap = argparse.ArgumentParser() 
ap.add_argument("-b", "--batch-size", type = int, default =32, help = "size of SGD mini-batches") 
args = vars(ap.parse_args()) 

    # Create the model 
x = tf.placeholder(tf.float32, [None, 784]) #784=28*28 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 
y = tf.matmul(x, W) + b 

y_ = tf.placeholder(tf.float32, [25112, 10]) 


sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
    # Train 

def next_batch(x, batchSize): 
    for i in np.arange(0, x.shape[0], batchSize): 
     yield (x[i:i + batchSize]) 

def gradient_descent_2(alpha, x, y, numIterations): 
    m,n = (784, 25112) # number of samples 
    theta = np.ones(n) 
    theta.fill(0.01) 
    x_transpose = x.transpose() 
    losshistory=[] 
    count = 0 
    batchX = 50 
    for (batchX) in next_batch(x, args["batch_size"]): 
     for iter in range(0, numIterations): 
      hypothesis = np.dot(x, theta) 
      loss = hypothesis - y 
      J = np.sum(loss ** 2)/(2 * m) # cost 
      lossHistory.append(J) 
      print("iter %s | J: %.3f" % (iter, J))  
      gradient = np.dot(x_transpose, loss)/m   
      theta = theta - alpha * gradient 
    return theta 

if __name__ == '__main__': 


    m, n = (784, 25112) 
    x = np.c_[ np.ones(n), image_tensor2] # insert column 
    alpha = 0.001 # learning rate 
    theta = gradient_descent_2(alpha, image_tensor2, y_, 50) 
    fig = plt.figure() 
    print(theta) 
+0

gut. Was sind die Abmessungen von image_tensor2 (image_tensor2.shape)? – putonspectacles

Antwort

0

Meine Intuition ist, dass image_tensor 3-D-Array während np.ones (n) ein 1-D-Array zu schaffen.

Aber Ihr Ziel ist es, eine Bias-Säule (meine Vermutung) einen schnellen Weg zu legen, das zu tun wäre:

b = np.ones((n + n+1)) 
x = b[:, 1:] = image_tensor2 

Beispiel

c = 
array([[7, 5, 6, 8, 7], 
     [5, 8, 7, 9, 7], 
     [9, 5, 6, 5, 8]]) 

b = np.ones((3, 6)) 
d = b[:, 1:] =c 

d = 
array([[ 1., 7., 5., 6., 8., 7.], 
     [ 1., 5., 8., 7., 9., 7.], 
     [ 1., 9., 5., 6., 5., 8.]]) 
Verwandte Themen