2016-12-16 3 views
0

Ich bin ein neuronales Netzwerk 3d-conv in TensorFlow und es funktionierte gut auf meinem Windows-Computer mit 64 GB RAM. Aber, wenn ich zu meinem Macbook Pro w/16GB auf RAM umschalte bekomme ich den folgenden Fehler:Einen malloc "falsche Checksumme für das befreite Objekt" Fehler in TensorFlow

Python (1292,0x700006cca000) malloc: *** Fehler für Objekt 0x10113fe00: falsche Prüfsumme für freigegebenes Objekt - Objekt war wahrscheinlich nach der Freigabe geändert. *** einen Haltepunkt in malloc_error_break gesetzt

Ich verwende eine ConvLayer Klasse als solche zu debuggen:

Klasse ConvLayer (Objekt):

def __init__(self, layer_input, in_channel, out_channel, weight_dims, conv_strides, 
      pool_ksize, pool_strides, name_suffix): 
    """ 
    :param input: Tensorflow variable that is the input to this layer 
    :param depth: Depth to look at for each convolution 
    :param in_channel: Number of channels going into the layer 
    :param out_channel: Number of channels out 
    :param window: A length-2 list of the window to look at 
    :param strides: A length-2 list of the stride size 
    :param name_suffix: Suffix to append to the variable names 
    """ 
    self.input = layer_input 
    self.W_conv = weight_variable(weight_dims + [in_channel, out_channel], 
            name="W" + name_suffix) 
    self.b_conv = bias_variable([out_channel]) 
    self.h_conv = tf.nn.relu(conv3d(self.input, self.W_conv, strides=conv_strides) + self.b_conv) 
    self.h_pool = max_pool3d_2x2(self.h_conv, ksize=pool_ksize, strides=pool_strides) 

und vollständig verbundene Schichten wie folgt definiert:

Klasse FCLayer (Objekt):

def __init__(self, layer_input, weight_dimensions, name_suffix): 
    self.input = layer_input 
    self.W_fc = weight_variable(shape=weight_dimensions, name="W" + name_suffix) 
    self.b_fc = bias_variable(shape=[weight_dimensions[1]]) 
    self.activation = tf.matmul(self.input, self.W_fc) + self.b_fc 

Dann wird mein eigentliches Netzwerk definiert als:

Klasse NNetwork (Objekt):

def __init__(self, color): 
    self.x = tf.placeholder(tf.float32, shape=[None, 8, 8, 4]) 
    self.y = tf.placeholder(tf.float32, shape=[None, 1]) 
    self.x_image = tf.reshape(self.x, [-1, 4, 8, 8, 1]) 

    self.layer1 = ConvLayer(layer_input=self.x_image, in_channel=1, out_channel=16, 
          weight_dims=[4, 4, 4], conv_strides=[1, 4, 2, 2, 1], 
          pool_ksize=[1, 1, 2, 2, 1], pool_strides=[1, 1, 2, 2, 1], 
          name_suffix="conv1_" + color) 
    self.layer2 = ConvLayer(layer_input=self.layer1.h_pool, in_channel=16, out_channel=32, 
          weight_dims=[1, 2, 2], conv_strides=[1, 1, 2, 2, 1], 
          pool_ksize=[1, 1, 1, 1, 1], pool_strides=[1, 1, 1, 1, 1], 
          name_suffix="conv2_" + color) 
    self.layer2flattened = tf.reshape(self.layer2.h_pool, [-1, 128]) 
    self.layer3 = FCLayer(self.layer2flattened, [128, 256], "_fc1_" + color) 
    self.layer4 = FCLayer(tf.nn.relu(self.layer3.activation), [256, 1], "_fc2_" + color) 

    self.y_hat = self.layer4.activation 
    self.loss = tf.reduce_mean(tf.square(self.y_hat - self.y)) 
    self.optimizer = tf.train.AdamOptimizer(1e-4).minimize(self.loss) 

Ich habe noch nie einen Fehler wie dies bei der Verwendung von TensorFlow und bin verloren, wie man versuchen und zu beheben gesehen. Wenn ich eine Faltungsschicht nehme und die erste in die vollständig verbundene Ebene lege, funktioniert es ganz gut, also vermute ich, dass es ganz mit Speicher zu tun hat, aber der Fehler sollte in diesem Fall ein Überlauffehler sein - oder so hätte ich es getan habe gedacht.

Wenn jemand will, um das Netzwerk laufen, hier einige Beispielcode, der funktionieren sollte ...

with tf.Session() as sess: 

    n_network = NNetwork("purple") 
    init_op = tf.initialize_all_variables() 
    sess.run(init_op) 
    test_input = test_input = np.zeros(shape=[1,8,8,4]) 
    runNetwork = sess.run(n_network.y_hat, feed_dict={n_network.x: test_input}) 

Jede Hilfe wäre sehr dankbar!

Antwort

0

Ich habe versucht, wieder zu laufen, nachdem ich alles aktualisiert und meinen Interpreter auf Pycharm geändert habe, und es hat funktioniert.

Es stellte sich heraus, dass ich auf einer älteren Version von TensorFlow unwissentlich lief, da mein Interpreter auf Systemstandard statt meiner Anaconda-Umgebung geändert worden war.

Verwandte Themen