E tenorflow / core / grappler / optimizers / meta_optimizer. cc: 561] function_optimizer fail: Неверный аргумент: узел - PullRequest
0 голосов
/ 17 апреля 2020

Пожалуйста, помогите! Я уже некоторое время запускаю модель в Tensorflow 2.0, модель работает отлично, но я думаю, что из-за этой ошибки мне не хватает эффективности, может кто-нибудь помочь мне понять, что происходит?

Спасибо

Mi конфигурация:

Ubuntu LTS 18.04 Inter Core i5 32 Гбайт памяти 2x NVIDIA GTX 1060 6 ГБ работает Python 3.7 Зеркальная стратегия в обоих графических процессорах

Строка ошибки:

**2020-04-17 00:32:51.172839: E tensorflow/core/grappler/optimizers/meta_optimizer.cc:561] function_optimizer failed: Invalid argument: Node 'replica_1/sequential_1/lstm_2/StatefulPartitionedCall_replica_1/StatefulPartitionedCall_1_27': Connecting to invalid output 33 of source node replica_1/sequential_1/lstm_2/StatefulPartitionedCall which has 33 outputs.**

Вывод на консоль:

INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1')

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

Train on 1283 samples, validate on 275 samples

Epoch 1/650

INFO:tensorflow:batch_all_reduce: 8 all-reduces with algorithm = nccl, num_packs = 1, agg_small_grads_max_bytes = 0 and agg_small_grads_max_group = 10

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:batch_all_reduce: 8 all-reduces with algorithm = nccl, num_packs = 1, agg_small_grads_max_bytes = 0 and agg_small_grads_max_group = 10

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

2020-04-17 00:32:51.172839: E tensorflow/core/grappler/optimizers/meta_optimizer.cc:561] function_optimizer failed: Invalid argument: Node 'replica_1/sequential_1/lstm_2/StatefulPartitionedCall_replica_1/StatefulPartitionedCall_1_27': Connecting to invalid output 33 of source node replica_1/sequential_1/lstm_2/StatefulPartitionedCall which has 33 outputs.

2020-04-17 00:32:51.502923: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] 
Successfully opened dynamic library libcublas.so.10

2020-04-17 00:32:52.292452: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7

1283/1283 [==============================] - 11s 9ms/sample - loss: 0.0207 - accuracy: 0.0421 - val_loss: 0.0044 - val_accuracy: 0.0109

Мой код:

import ta
import math
import argparse
import numpy as np
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras import optimizers
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error



def get_scaled_data(wdf, args):
    data = wdf.values[:-args.m_output]
    scaler = MinMaxScaler()
    y_scaler = MinMaxScaler()
    scaled_X = scaler.fit_transform(data[:, :-args.m_output])
    scaled_y = y_scaler.fit_transform(data[:, -args.m_output:])
    scaled_data = np.concatenate((scaled_X,scaled_y), axis=1)
    return scaled_data, y_scaler

def get_X_y_split(data, args):
    data_size = len(data) - args.m_time_steps + 1
    series_X = []
    series_y = []
    for i in range(data_size):
        series_X.append(data[i:i + args.m_time_steps,:-args.m_output])
        series_y.append(data[i + args.m_time_steps - 1, -args.m_output:])
    series_X = np.array(series_X)
    series_y = np.array(series_y)
    train_X, X, train_y, y = train_test_split(series_X, series_y, test_size=0.3)
    valid_X, test_X, valid_y, test_y = train_test_split(X, y, test_size=0.5)
    return train_X, test_X, valid_X, train_y, test_y, valid_y

def make_model(args):
    mirrored_strategy = tf.distribute.MirroredStrategy()
    with mirrored_strategy.scope():
        model = Sequential()
        model.add(LSTM(args.m_neurons, input_shape=(args.m_time_steps, args.m_features), return_sequences=True))
        model.add(Dropout(args.m_dropout))
        model.add(LSTM(args.m_neurons, return_sequences=False))
        model.add(Dense(args.m_output))
        model.compile(loss='mse', optimizer=optimizers.Adam(learning_rate=args.m_learning_rate, clipnorm=args.m_max_grad_norm), metrics=['accuracy'])
    return model

def get_arguments():
    parser = argparse.ArgumentParser(description="Specify Params for Experimental Setting")

    parser.add_argument('--m_epochs', type=int, default=650)                        
    parser.add_argument('--m_batch_size', type=int, default=100) 
    parser.add_argument('--m_neurons', type=int, default=128)
    parser.add_argument('--m_dropout', type=float, default=0.0) 
    parser.add_argument('--m_learning_rate', type=float, default=1e-3)
    parser.add_argument('--m_max_grad_norm', type=float, default=1.0)
    parser.add_argument('--m_time_steps', type=int, default=168)
    parser.add_argument('--m_features', type=int, default=50)
    parser.add_argument('--m_output', type=int, default=24)   
    return parser.parse_args()


#####################################################################
#####################################################################

def get_errors(model, test_X, test_y):
    pred_y = model.predict(test_X)    
    inv_pred_y = y_scaler.inverse_transform(pred_y)
    inv_test_y = y_scaler.inverse_transform(test_y)
    rmse = math.sqrt(mean_squared_error(inv_test_y, inv_pred_y))
    mae = mean_absolute_error(inv_test_y, inv_pred_y)
    return rmse, mae


def get_model_run_test(args):
    model = make_model(args)
    model.fit(train_X,train_y, epochs=args.m_epochs,validation_data=(valid_X,valid_y),batch_size=args.m_batch_size,shuffle=True)
    rmse, mae = get_errors(model, test_X, test_y)
    print(f'epochs: {args.m_epochs} ==> RMSE: %.2f, MAE: %.2f' % (rmse, mae))      
    return model, rmse, mae


args = get_arguments()

databook = refresh_data()

for key in databook.keys():
    df = databook[key].copy()
    data, y_scaler = get_scaled_data(df,args) 
    train_X, test_X, valid_X, train_y, test_y, valid_y = get_X_y_split(data,args)
    args.m_features = train_X.shape[-1]

    model, rmse, mae = get_model_run_test(args)

Пожалуйста, помогите, я не смог найти ответ и не знаю, что происходит. Я думаю, что это может быть какая-то конфигурация модели или что-то, но я не совсем уверен, Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...