首页 > 解决方案 > 如何通过张量流中的用户定义参数初始化神经网络

问题描述

我正在尝试使用tensorflow. 我希望我的模型使用默认参数或用户传递的任何重量大小列表来初始化自己。但是我的代码生成的计算图似乎不正确。如何通过用户定义的参数初始化 NN tensorflow

def setUp(self):
    self.hidden_layer_ = len(self.hidden_layer_sizes)
    self.weights = []
    self.biases = []

    size_list = [self.input_size]
    size_list.extend(list(self.hidden_layer_sizes))
    i = 0

    while i + 1 < len(size_list):
        prev_size = size_list[i]
        size = size_list[i+1]
        w = tf.Variable(tf.truncated_normal([prev_size, size], stddev=0.1))
        b = tf.Variable(tf.zeros([size]))
        self.weights.append(w)
        self.biases.append(b)
        i += 1
    self.w_out = tf.Variable(tf.truncated_normal([size_list[-1], self.output_size], stddev=0.1))
    self.b_out = tf.Variable(tf.zeros([self.output_size]))

    self.input_x = tf.placeholder(tf.float32, [None, self.input_size], name='input')
    self.input_y = tf.placeholder(tf.float32, [None, self.output_size], name='label')
    self.keep_prob_plh = tf.placeholder(tf.float32)


    self.layers = [self.input_x]
    for w, b in zip(self.weights, self.biases):
        hidden = ACT_FUN_DICT[self.activation](tf.matmul(self.layers[-1], w) + b)
        hidden_drop = tf.nn.dropout(hidden, self.keep_prob_plh)
        self.layers.append(hidden_drop)

    with tf.variable_scope('output'):
        self.output_layer = tf.nn.sigmoid(tf.matmul(self.layers[-1], self.w_out) + self.b_out)
    self.cost_func = tf.reduce_mean(tf.reduce_sum(tf.pow((self.input_y - self.output_layer), 2)))
    self.cost_summary = tf.summary.scalar('Cost', self.cost_func)

    self.optimizer = SOLVER_DICT[self.solver](self.learning_rate).minimize(self.cost_func)

    root_logdir = './tf_logs'
    now = datetime.utcnow().strftime('%Y%m%d%H%M%S')
    log_dir = "{}/run-{}/".format(root_logdir, now)
    self.file_writer = tf.summary.FileWriter(log_dir, tf.get_default_graph())

    self.sess.run(tf.global_variables_initializer())

我使用一个类来实现 NN,权重的大小存储在 member 中self.hidden_layer_sizes

class MLPClassifier(BaseEstimator, TransformerMixin):

    def __init__(self, hidden_layer_sizes=(100,), activation='relu', solver='sgd', alpha=0.0001,
             learning_rate=0.001, max_iter=200, random_state=42, keep_prob=0.75, logged = True):

        self.hidden_layer_sizes = hidden_layer_sizes
        self.activation = activation
        self.solver = solver
        self.alpha = alpha
        self.learning_rate = learning_rate
        self.max_iter = max_iter
        self.random_state = random_state
        self.keep_prob = keep_prob
        self.fitted = False
        self.logged = True
        self.sess = tf.Session()
        self.sess.as_default()

这就是我的所有代码,这是我的计算图

标签: pythontensorflowmachine-learning

解决方案


推荐阅读