无法使用python作为cPickle.PicklingError在TensorFlow中以.npy格式保存numpy

时间:2017-08-02 18:44:33

标签: python numpy tensorflow nlp deep-learning

我有一个训练有素的深层神经网络,有一个句子级注意力层。该网络被称为GRU,如下所示,我想在测试后得到关注值(sen_alpha)的结果。

class GRU:
def __init__(self,is_training,word_embeddings,settings):

    self.big_num = big_num = settings.big_num       
    for i in range(big_num):

        sen_repre.append(tf.tanh(attention_r[self.total_shape[i]:self.total_shape[i+1]]))
        batch_size = self.total_shape[i+1]-self.total_shape[i]
                sen_alpha.append(tf.reshape(tf.nn.softmax(tf.reshape(tf.matmul(tf.mul(sen_repre[i],sen_a),sen_r),[batch_size])),[1,batch_size]))
                self.attentions.append(sen_alpha[i])

测试代码:

def main(_):
test_settings = Settings()
with tf.Graph().as_default():

    sess = tf.Session()
    with sess.as_default():     
        with tf.variable_scope("model"):
                            mtest = GRU(is_training=False, word_embeddings = None, settings = test_settings)
                    saver = tf.train.Saver()

             attentions = mtest.attentions
             att = np.array(attentions)       
             print(str(type(att)))
             print(att[0:100])
             np.save("attentions.npy",att)

结果:

输入:输入'numpy.ndarray'

att [0:100]:

[<tf.Tensor 'model/Reshape_9:0' shape=(1, ?) dtype=float32<tf.Tensor 'model/Reshape_17:0' shape=(1, ?) dtype=float32<tf.Tensor 'model/Reshape_25:0' shape=(1, ?) dtype=float32> 错误:

文件“test_GRU.py”,第242行,在main中 np.save( “attentions.npy”,ATT)

cPickle.PicklingError:无法挑剔:属性查找内置。模块失败

如何正确保存结果?感谢

1 个答案:

答案 0 :(得分:0)

我无法修复您的代码,但我可以为您提供从模型定义到提取值的逐步设计的简短版本:

  1. 定义模型图。这意味着GRU是图表的一部分。
  2. 开始会话,例如sess = tf.Session()
  3. 初始化图表的变量,例如sess.run(tf.global_variables_initializer())
  4. 使用会话方法从相应的图表中获取值,例如sess.run(the_tensor, dictionary_of_numpy_array_as_input_to_graph)
  5. 输出将是numpy数组,您可以保存它们。