Тензор потока: прогнозирование меток данных из обученного плотного слоя - PullRequest
0 голосов
/ 26 мая 2018

Я обучил простую нейронную сеть с прямой связью с использованием tf.layers.dense. Однако после обучения слоев с использованием функций оптимизации и обучения я не знаю, как использовать обученные слои для прогнозирования меток для новых данных, которые я хотел быЯ искал stackoverflow и google о том, как это сделать, и самый близкий ответ, который я нашел, был Использование созданной модели тензорного потока для прогнозирования Однако, нет более простого способа использовать обученный слой, кромесохранить этот слой и вызвать его снова?

Эта нейронная сеть обучена прогнозировать выходную концентрацию в результате химической реакции.Вывод химической реакции может быть смоделирован с помощью связанного ODE и может быть легко решен, но я пытаюсь использовать нейронные сети, чтобы дать приблизительное решение.

#Making Data
training_features=pd.DataFrame(data=np.random.random_sample([500,3]),columns=['ca','t','T'])
training_labels=conc_out(training_features,trans)
validation_features=pd.DataFrame(data=np.random.random_sample([30,3]),columns=['ca','t','T'])
validation_labels=conc_out(training_features,trans)

def my_input_fn(features, targets, batch_size=1,num_epochs=None,shuffle=True):
    #Creating Dataset importing function, returning get_next from iterator
    #features=features.to_dict('list')

    ds=tf.data.Dataset.from_tensor_slices((features,targets))
    if shuffle:
        ds=ds.shuffle(buffer_size=10000)

    ds=ds.batch(batch_size).repeat(num_epochs)

    features,labels=ds.make_one_shot_iterator().get_next()
    return features,labels

def nn(input_featurs,hidden_layers=[10]):
    net=tf.layers.dense(input_featurs,hidden_layers[0],activation=tf.nn.sigmoid)
    if len(hidden_layers)>1:
        for i in range(len(hidden_layers)-1):
            net=tf.layers.dense(net,hidden_layers[i+1],activation=tf.nn.sigmoid)
    logits=tf.layers.dense(net,2,activation=None)
    return logits

def train_nn_regression_model(
        learning_rate,
        epochs,
        batch_size,
        hidden_units,
        training_examples,
        training_targets,
        validation_examples,
        validation_targets):

    # Create input functions.

    features,labels=my_input_fn(training_examples,training_targets,batch_size=batch_size)
    predictions=nn(features,hidden_units)
    loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=predictions,labels=labels))
    train_op=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)

    with tf.Session() as sess:
        #Training neural network
        sess.run(tf.global_variables_initializer())
        training_predictions_before = pd.DataFrame(data=sess.run(training_predictions), columns=['TP_Ca', 'TP_Cb'])
        print(training_predictions_before.head(10))
        for epoch in range(epochs):
            epoch_loss=0
            for _ in range(int(training_examples.shape[0]/batch_size)):
                _,loss_value=sess.run([train_op,loss])
                epoch_loss+=loss_value
            print('Epoch : ',epoch+1, ' out of ', epochs,' . Epoch loss = ',epoch_loss)


        training_predictions=pd.DataFrame(data=sess.run(training_predictions),columns=['TP_Ca','TP_Cb'])
        print(training_predictions.head(10))

train_nn_regression_model(
        learning_rate=0.002,
        epochs=10,
        batch_size=20,
        hidden_units=[100],
        training_examples=training_features,
        training_targets=training_labels,
        validation_examples=validation_features,
        validation_targets=validation_labels)

Когда я запускаю код, training_predictions_before и training_predictions дает точно такой же ответ.Тем не менее, не должен ли training_predictions дать другой ответ, когда он выполняется после учебных операций?

Спасибо!

Редактировать: я отредактировал код, чтобы убедиться, что все работает в одном сеансе.

...