首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Tensorflow在For循环中创建神经网络

使用Tensorflow在For循环中创建神经网络
EN

Stack Overflow用户
提问于 2019-06-18 16:08:23
回答 1查看 627关注 0票数 1

我正在尝试使用Tensorflow在for循环中创建一个简单的MLP,它来自包含所需网络结构的列表,例如structure = 100,50,20,1。在这个列表中,100表示输入大小,1表示输出大小。(我需要将它用于预测应用程序,但这与我的问题没有严格的关系。)

我还没有看到在Tensorflow中创建网络的类似方法。出于一些我无法理解的原因,人们似乎建议单独声明每个变量更好,例如layer_1 = x1 * w1 + b1,然后layer_2 = x2 * w2 + b2。我在for循环for i in range(len(Structure)-1)中使用的动态创建网络的方法是错误的吗?对我来说,网络似乎工作得很好,tensorboard上显示的网络结构似乎是正确的。

你认为用这种方式创建网络合适吗?你认为我在不知不觉中遇到了什么Tensorflow / Context Manager的问题吗?

Link to network graph

代码语言:javascript
复制
import tensorflow as tf

class Model(object):

    def __init__(self, structure, lr=0.01):

        assert structure[-1] == 1

        input_size = structure[0]

        act_fun = tf.nn.tanh

        G = tf.Graph()

        with G.as_default():

            self.X = tf.placeholder(tf.float32, shape=[None, input_size])
            self.Y = tf.placeholder(tf.float32, shape=[None, 1])              

            X_out = self.X
            for i in range(len(structure)-1):
                from_, to = structure[i], structure[i+1]
                initializer = tf.variance_scaling_initializer()
                w = tf.Variable(initializer([from_, to]), dtype=tf.float32, name=f'W{i}')
                b = tf.Variable(tf.zeros(to), name=f'B{i}')

                if to != 1:
                    X_out = act_fun(tf.matmul(X_out, w) + b)
                else:
                    X_out = tf.matmul(X_out, w) + b

            self.forecast_layer = X_out
            self.loss = tf.losses.mean_squared_error(self.Y, self.forecast_layer)
            self.trainer = tf.train.GradientDescentOptimizer(lr).minimize(self.loss)
            self.init = tf.global_variables_initializer()

        self.session = tf.Session(graph=G)
        self.session.run(self.init)
        self.session.graph.finalize()



    def fit(self, X, Y):
        self.session.run(self.trainer, feed_dict={self.X:X, self.Y:Y})



    def forecast(self, X):
        return self.forecast_layer.eval(feed_dict={self.X:X}, session=self.session)



    def evaluate_loss(self, X, Y):
        return self.loss.eval(feed_dict={self.Y:Y, self.forecast_layer:self.forecast(X)}, session=self.session)


M = Model([100, 50, 20, 1], lr=0.001)
EN

回答 1

Stack Overflow用户

发布于 2019-06-18 16:17:28

虽然我会使用tf.layers.dense,但这看起来还不错

代码语言:javascript
复制
X_out = self.X
layers = [50, 20, 1]
for layer_size in layers:
    X_out = tf.layers.dense(X_out, layer_size, activation=act_fun if x != 1 else None)

注意:

警告:此函数已弃用。它将在未来的版本中删除。更新说明:改用keras.layers.dense。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56644517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档