2017-03-25 151 views
0

我在看下面的例子中的張量: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/4_Utils/save_restore_model.ipynbTensorflow - 重新初始化權重和重塑預訓練模式

我希望能夠重新初始化隱含層2的權重和重塑最終層(out_layer)至與3班而不是10班。

我希望能夠在第二次會議上做到這一點 - 這意味着,我恢復了訓練有素的模型後。

我的主要目標是學習如何在tensorflow中進行轉移學習,我認爲通過這個例子我可以學到這一點。你能指出我應該做什麼嗎?我真的很想看,但找不到任何類似的例子。

回答

0

我解決了它。

,能夠通過執行以下操作來重新初始化權重: 重要的部分是SET_VALUE接收所述會話,tensorflow變量和新的權重看重

def _convert_string_dtype(dtype): 
    if dtype == 'float16': 
     return tf.float16 
    if dtype == 'float32': 
     return tf.float32 
    elif dtype == 'float64': 
     return tf.float64 
    elif dtype == 'int16': 
     return tf.int16 
    elif dtype == 'int32': 
     return tf.int32 
    elif dtype == 'int64': 
     return tf.int64 
    elif dtype == 'uint8': 
     return tf.int8 
    elif dtype == 'uint16': 
     return tf.uint16 
    else: 
     raise ValueError('Unsupported dtype:', dtype) 

def set_value(sess, x, value): 
    """Sets the value of a variable, from a Numpy array. 
    # Arguments 
     x: Tensor to set to a new value. 
     value: Value to set the tensor to, as a Numpy array 
      (of the same shape). 
    """ 
    value = np.asarray(value) 
    tf_dtype = _convert_string_dtype(x.dtype.name.split('_')[0]) 
    if hasattr(x, '_assign_placeholder'): 
     assign_placeholder = x._assign_placeholder 
     assign_op = x._assign_op 
    else: 
     assign_placeholder = tf.placeholder(tf_dtype, shape=value.shape) 
     assign_op = x.assign(assign_placeholder) 
     x._assign_placeholder = assign_placeholder 
     x._assign_op = assign_op 
    return sess.run(assign_op, feed_dict={assign_placeholder: value}) 

# Tensorflow variable name 
tf_var_name ="h2_weights" 
var = [var for var in tf.global_variables() if var.op.name==tf_var_name][0] 
var_shape = var.get_shape().as_list() 

# Initialize to zero 
new_weights = np.zeros(var_shape) 

set_value(sess,var,new_weights)  
相關問題