Восстановление модели с CNN - PullRequest
       10

Восстановление модели с CNN

0 голосов
/ 14 сентября 2018

У меня есть сеть CNN в тензорном потоке.Я сохраняю модель и пытаюсь восстановить.Я прочитал довольно много предложений относительно сохранения и восстановления модели.Я был в состоянии сделать это для сети прямой связи, но CNN оказывается немного сложным.Ниже приведены некоторые фрагменты кода

1.Импорт данных (внешний источник)

2.Основной код CNN

def conv_net(a):

    with tf.variable_scope("conv_cell", reuse=tf.AUTO_REUSE):        
        conv11 = tf.layers.conv1d(a, 50, 2, activation=tf.nn.relu, name='conv11')    
        conv1 = tf.layers.max_pooling1d(conv11, 2, 1, name='conv1'
        conv21 = tf.layers.conv1d(conv1, 30, 2, activation=tf.nn.relu, name='conv21')
        conv2 = tf.layers.max_pooling1d(conv21, 2, 1, name='conv2')

        fc11 = tf.contrib.layers.flatten(conv2)
        fc1 = tf.layers.dense(fc11, 180, name='conv3')
        outputs1 = tf.layers.dense(fc1, timesteps/10, name='conv4')
        outputs = tf.reshape(outputs1, [-1, 1])

    return outputs    

Y_Pred1 = conv_net(X)    
Y_Pred = tf.reshape(Y_Pred1, [-1, TimeWindow, num_input])  

Loss = tf.reduce_sum((Y - Y_Pred)**2)
optimizer = tf.train.AdamOptimizer(Learning_rate).minimize(Loss)

3.Основная сессия

with tf.Session() as sess:
    sess.run(init)
    saver = tf.train.Saver()

------------------------------------------ (повышение квалификации) ------------------------------------------------

    save_path = saver.save(sess, './Save_Network/my_model')
    print("Model saved in file: %s" % save_path)

4.Мой вопрос

Я не уверен, что это спасает.Поскольку я не определил вес и уклоны отдельно.Вес и уклоны определяются внутренне встроенной командой "tf.layers.conv1d". Я не знаю, как их восстановить.Я попытался следовать, чтобы восстановить и, как ожидалось, это не сработало.

with tf.Session() as sess:
    new_saver = tf.train.import_meta_graph('./Save_Network/my_model.meta')
    new_saver.restore(sess, tf.train.latest_checkpoint('./Save_Network'))

    def conv_net(a):

        conv11 = tf.layers.conv1d(a, 50, 2, activation=tf.nn.relu)    
        conv1 = tf.layers.max_pooling1d(conv11, 2, 1)                  

        conv21 = tf.layers.conv1d(conv1, 30, 2, activation=tf.nn.relu) 
        conv2 = tf.layers.max_pooling1d(conv21, 2, 1)

        fc11 = tf.contrib.layers.flatten(conv2)
        fc1 = tf.layers.dense(fc11, 180)

        outputs1 = tf.layers.dense(fc1, timesteps/10)
        outputs = tf.reshape(outputs1, [-1, 1])

        return outputs    

Y_Pred1 = conv_net(X)    
Y_Pred = tf.reshape(Y_Pred1, [-1, TimeWindow, num_input])

4.Я получаю ошибку FailedPreconditionError (см. Выше для отслеживания): Попытка использовать неинициализированное значение conv1d / kernel [[Узел: conv1d / kernel / read = IdentityT = DT_FLOAT, _device = "/ job: localhost / replica: 0 / task:0 / устройство: ЦП: 0" ]] * +1029 *

Я попытался инициализировать переменные с помощью init = tf.global_variables_initializer () sess.run (init)

Это не сработало.

Как получить доступ к этим весам иуклоны и восстановить их.

...