首页 > 解决方案 > 如何使用 tf.identity 制作张量列表的副本(而不仅仅是单个张量)?

问题描述

我试过这个

weights = {
'wc1': tf.get_variable('wc1', shape=(8,8,4,32), initializer=tf.contrib.layers.xavier_initializer()), 
'wc2': tf.get_variable('wc2', shape=(4,4,32,64), initializer=tf.contrib.layers.xavier_initializer()), 
'wc3': tf.get_variable('wc3', shape=(3,3,64,64), initializer=tf.contrib.layers.xavier_initializer()), 
'wd1': tf.get_variable('wd1', shape=(7744,512), initializer=tf.contrib.layers.xavier_initializer()), 
'wd2': tf.get_variable('wd2', shape=(512,action_size), initializer=tf.contrib.layers.xavier_initializer()), 
'bc1': tf.get_variable('bc1', shape=(32), initializer=tf.contrib.layers.xavier_initializer()),
'bc2': tf.get_variable('bc2', shape=(64), initializer=tf.contrib.layers.xavier_initializer()),
'bc3': tf.get_variable('bc3', shape=(64), initializer=tf.contrib.layers.xavier_initializer()),
'bd1': tf.get_variable('bd1', shape=(512), initializer=tf.contrib.layers.xavier_initializer()),
'bd2': tf.get_variable('bd2', shape=(action_size), initializer=tf.contrib.layers.xavier_initializer()),

}

接着

weight_copies = [tf.identity(weights) for x in range(10)]

但我收到以下错误

TypeError: Expected binary or unicode string, got {'wc1': , 'wc2': , 'wc3': , 'wd1': , 'wd2': , 'bc1': , 'bc2': , 'bc3': , “bd1”:,“bd2”:}

现在我的问题是我怎样才能做到这一点而不会出错?

标签: pythontensorflow

解决方案


weights是一个字典,所以你需要遍历这些值。

weight_copies = [tf.identity(v) for v in weights.values()]

如果您希望您的输出也成为字典,请迭代items.

weight_copies = {k: tf.identity(v) for k, v in weights.items()}

推荐阅读