Tensorflow | ValueError: для любой переменной не предусмотрены градиенты. - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь сделать прогноз временного ряда с помощью Bitcoin. Я загрузил свои данные и масштабировал их. Когда я пытался подогнать данные. Он возвращает эту ошибку. Есть и другие вопросы относительно той же ошибки, но ко мне это не относится.

Код:

import tensorflow as tf
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# Load Data

df = pd.read_csv("exampledata.csv", header=None, names=[
                 'Date', 'Close'], parse_dates=['Date'])
print(df.head())
print(df.shape)

# The testing data
test = df.shift(-4)

# Preprocessing Data

target = df.pop('Date')

scaler = MinMaxScaler(feature_range=(0, 1))
print(scaler.fit_transform(df))

# Creating The Model

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(50, activation='relu', input_shape=(1,)))
# This is to reshape the output for LSTM
model.add(tf.keras.layers.Lambda(
    lambda x: tf.expand_dims(model.output, axis=-1)))
# I don't understand input_shape that much, I put 1 because I will give the model 1 column of input data
model.add(tf.keras.layers.LSTM(100, activation='relu'))
model.add(tf.keras.layers.Dropout(rate=0.2))
model.add(tf.keras.layers.Dense(1, activation='relu'))
model.compile(optimizer='adam', loss='mean_absolute_error',
              metrics=['accuracy'])
model.summary()

# Training Model

model.fit(df, epochs=100)

А вот ошибки:

Traceback (most recent call last):
  File "example.py", line 39, in <module>
    model.fit(df, epochs=100)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 848, in fit
    tmp_logs = train_function(iterator)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 627, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 506, in _initialize
    *args, **kwds))
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 2446, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 2777, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 2667, in _create_graph_function
    capture_by_value=self._capture_by_value),
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py", line 981, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 441, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py", line 968, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:541 train_step  **
        self.trainable_variables)
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:1804 _minimize
        trainable_variables))
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:521 _aggregate_gradients
        filtered_grads_and_vars = _filter_grads(grads_and_vars)
    C:\Users\User\anaconda3\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:1219 _filter_grads
        ([v.name for _, v in grads_and_vars],))

    ValueError: No gradients provided for any variable: ['dense/kernel:0', 'dense/bias:0', 'lstm/lstm_cell/kernel:0', 'lstm/lstm_cell/recurrent_kernel:0', 'lstm/lstm_cell/bias:0', 'dense_1/kernel:0', 'dense_1/bias:0'].

Вот мои данные (частично) выглядят так (я их масштабировал):

[[0.29738429]
 [0.27614102]
 [0.39392314]
 [0.        ]
 [1.        ]
 [0.97227646]]

1 Ответ

1 голос
/ 28 мая 2020

переопределите ваш слой лямбда таким образом

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(50, activation='relu', input_shape=(1,)))
model.add(tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1))) # <======
model.add(tf.keras.layers.LSTM(100, activation='relu'))
model.add(tf.keras.layers.Dropout(rate=0.2))
model.add(tf.keras.layers.Dense(1, activation='relu'))
model.compile(optimizer='adam', loss='mean_absolute_error')
model.summary()

model.fit(np.random.uniform(0,1, (100,1)), np.random.uniform(0,1, 100), epochs=10)

Я добавляю полный пример, основанный на вашем вопросе. мы используем значение в момент времени t, чтобы предсказать значение в момент времени t + 1

# substitute this with your data
df = pd.DataFrame({'Date':np.random.randint(0,100, 100), 
                   'Close':np.random.uniform(0,1, 100)})

len_train = int(len(df)*0.8) # train size
# split train test
X_train = df.Close.values[:len_train]
X_test = df.Close.values[len_train:]

scaler = MinMaxScaler(feature_range=(0, 1))
X_train = scaler.fit_transform(X_train.reshape(-1, 1))
X_test = scaler.transform(X_test.reshape(-1, 1))

# create target as the next day value
y_train = X_train[1:]
X_train = X_train[:-1]
y_test = X_test[1:]
X_test = X_test[:-1]


model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(50, activation='relu', input_shape=(1,)))
model.add(tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1)))
model.add(tf.keras.layers.LSTM(100, activation='relu'))
model.add(tf.keras.layers.Dropout(rate=0.2))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer='adam', loss='mean_absolute_error')
model.summary()

model.fit(X_train, y_train, epochs=10)

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