Sep-10-2021, 05:51 PM
When I try to run thee below code:
My current specsare:
Windwos 10
python - 3.7.0
numpy - 1.19.5
h5py - 2.10.0
tensorflow - 2.3.0
Any help appreciated.
Respectfully,
LZ
''' Script to run time series models against all data in the \data folder. Author: @josh ''' import os import numpy as np import pandas as pd from tensorflow.keras.optimizers import SGD from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM, Dropout, GRU, SimpleRNN from sklearn.preprocessing import MinMaxScaler from fbprophet import Prophet import matplotlib.pyplot as plt plt.style.use('fivethirtyeight') def create_files_dict(pth='./data/'): ''' create dictionary of files ''' # pull all data files files = os.listdir(pth) print(files) all_data = dict() for file in files: # create key and file path file_key = file.split('_')[0] file_path = os.path.join(pth, file) # read the data data = pd.read_csv( file_path, index_col='Date', parse_dates=['Date'] ) # store data in dictionary all_data[file_key] = data return all_data def plot_data(data, stock_name, pth='./figures/'): ''' plot the data ''' # create train and test data["High"][:'2016'].plot(figsize=(16, 4), legend=True) data["High"]['2017':].plot(figsize=(16, 4), legend=True) # plot the data plt.legend(['Training set (Before 2017)', 'Test set (2017 and beyond)']) plt.title('{} stock price'.format(stock_name)) fig_path = os.path.join(pth, stock_name + '_train_test') # save the data, pause, and close plt.savefig(fig_path) plt.pause(1) plt.close() def create_dl_train_test_split(all_data): ''' create training/testing data and scaler object ''' # create training and test set training_set = all_data[:'2016'].iloc[:, 1:2].values test_set = all_data['2017':].iloc[:, 1:2].values # scale the data sc = MinMaxScaler(feature_range=(0, 1)) training_set_scaled = sc.fit_transform(training_set) # create training and test data X_train = [] y_train = [] for i in range(60, 2768): X_train.append(training_set_scaled[i - 60:i, 0]) y_train.append(training_set_scaled[i, 0]) X_train, y_train = np.array(X_train), np.array(y_train) # Reshaping X_train for efficient modelling X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) total_data = pd.concat( (all_data["High"][:'2016'], all_data["High"]['2017':]), axis=0) inputs = total_data[len(total_data) - len(test_set) - 60:].values inputs = inputs.reshape(-1, 1) inputs = sc.transform(inputs) # Preparing X_test X_test = [] for i in range(60, 311): X_test.append(inputs[i - 60:i, 0]) X_test = np.array(X_test) X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) return X_train, y_train, X_test, sc def create_single_layer_small_rnn_model(X_train, y_train, X_test, sc): ''' create single layer rnn model trained on X_train and y_train and make predictions on the X_test data ''' # create a model model = Sequential() model.add(SimpleRNN(6)) model.add(Dense(1)) model.compile(optimizer='rmsprop', loss='mean_squared_error') # fit the RNN model model.fit(X_train, y_train, epochs=100, batch_size=150) # Finalizing predictions scaled_preds = model.predict(X_test) test_preds = sc.inverse_transform(scaled_preds) return model, test_preds def create_single_layer_rnn_model(X_train, y_train, X_test, sc): ''' create single layer rnn model trained on X_train and y_train and make predictions on the X_test data ''' # create a model model = Sequential() model.add(SimpleRNN(32)) model.add(Dense(1)) model.compile(optimizer='rmsprop', loss='mean_squared_error') # fit the RNN model model.fit(X_train, y_train, epochs=100, batch_size=150) # Finalizing predictions scaled_preds = model.predict(X_test) test_preds = sc.inverse_transform(scaled_preds) return model, test_preds def create_rnn_model(X_train, y_train, X_test, sc): ''' create rnn model trained on X_train and y_train and make predictions on the X_test data ''' # create a model model = Sequential() model.add(SimpleRNN(32, return_sequences=True)) model.add(SimpleRNN(32, return_sequences=True)) model.add(SimpleRNN(32, return_sequences=True)) model.add(SimpleRNN(32)) model.add(Dense(1)) model.compile(optimizer='rmsprop', loss='mean_squared_error') # fit the RNN model model.fit(X_train, y_train, epochs=100, batch_size=150) # Finalizing predictions scaled_preds = model.predict(X_test) test_preds = sc.inverse_transform(scaled_preds) return model, test_preds def create_GRU_model(X_train, y_train, X_test, sc): ''' create GRU model trained on X_train and y_train and make predictions on the X_test data ''' # The GRU architecture regressorGRU = Sequential() # First GRU layer with Dropout regularisation regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1), activation='tanh')) regressorGRU.add(GRU(units=50, return_sequences=True, activation='tanh')) regressorGRU.add(GRU(units=50, return_sequences=True, activation='tanh')) regressorGRU.add(GRU(units=50, activation='tanh')) regressorGRU.add(Dense(units=1)) # Compiling the RNN regressorGRU.compile( optimizer=SGD( lr=0.01, decay=1e-7, momentum=0.9, nesterov=False), loss='mean_squared_error') # Fitting to the training set regressorGRU.fit(X_train, y_train, epochs=50, batch_size=150) GRU_predicted_stock_price = regressorGRU.predict(X_test) GRU_predicted_stock_price = sc.inverse_transform(GRU_predicted_stock_price) return regressorGRU, GRU_predicted_stock_price def create_GRU_with_drop_out_model(X_train, y_train, X_test, sc): ''' create GRU model trained on X_train and y_train and make predictions on the X_test data ''' # The GRU architecture regressorGRU = Sequential() # First GRU layer with Dropout regularisation regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1), activation='tanh')) regressorGRU.add(Dropout(0.2)) # Second GRU layer regressorGRU.add(GRU(units=50, return_sequences=True, activation='tanh')) regressorGRU.add(Dropout(0.2)) # Third GRU layer regressorGRU.add(GRU(units=50, return_sequences=True, activation='tanh')) regressorGRU.add(Dropout(0.2)) # Fourth GRU layer regressorGRU.add(GRU(units=50, activation='tanh')) regressorGRU.add(Dropout(0.2)) # The output layer regressorGRU.add(Dense(units=1)) # Compiling the RNN regressorGRU.compile( optimizer=SGD( lr=0.01, decay=1e-7, momentum=0.9, nesterov=False), loss='mean_squared_error') # Fitting to the training set regressorGRU.fit(X_train, y_train, epochs=50, batch_size=150) GRU_predicted_stock_price = regressorGRU.predict(X_test) GRU_predicted_stock_price = sc.inverse_transform(GRU_predicted_stock_price) return regressorGRU, GRU_predicted_stock_price def create_prophet_results(all_data, final_train_idx=2768, pred_periods=250): ''' create prophet model trained on first 2768 rows by default and predicts on last 250 rows ''' # Pull train data train_data = all_data[:final_train_idx].reset_index()[['Date', 'High']] train_data.columns = ['ds', 'y'] # Create and fit model prophet_model = Prophet() prophet_model.fit(train_data) # Provide predictions test_dates = prophet_model.make_future_dataframe(periods=pred_periods) forecast_prices = prophet_model.predict(test_dates) return forecast_prices def create_prophet_daily_results(data): ''' ''' test_results = pd.DataFrame() for val in range(2768, 3019): # format training dataframe df = data['High'][:val].reset_index() df.columns = ['ds', 'y'] # Instantiate and fit the model proph_model = Prophet(daily_seasonality=True) proph_model.fit(df) # create test dataframe test_dates = proph_model.make_future_dataframe(periods=1) # store test results in dataframe preds = proph_model.predict(test_dates).tail(1) test_results = test_results.append(preds) return test_results def plot_results(actuals, stock_name, small_one_layer_preds, one_layer_preds, yearly_prophet_preds, gru_drop_preds, rnn_preds, gru_preds, plot_pth='./figures'): ''' plot the results ''' plt.figure(figsize=(20, 5)) plt.plot(yearly_prophet_preds.reset_index()[ 'yhat'].values[-250:], label='prophet yearly predictions') plt.plot(stock_data["High"]['2017':].values[:-1], label='actual values') plt.plot(small_one_layer_preds, label='Single Layer Small RNN values') plt.plot(one_layer_preds, label='Single Layer RNN values') plt.plot(gru_drop_preds, label='GRU with dropout values') plt.plot(rnn_preds, label='RNN values') plt.plot(gru_preds, label='GRU values') plt.title('{} Predictions from Prophet vs. Actual'.format(stock_name)) plt.legend() fig_path = os.path.join(plot_pth, 'results', stock_name + '_preds') # save the data, pause, and close plt.savefig(fig_path) plt.pause(1) plt.close() if __name__ == '__main__': all_data = create_files_dict() for stock_name, stock_data in all_data.items(): # initial plots plot_data(stock_data, stock_name) # create dl data X_train, y_train, X_test, sc = create_dl_train_test_split(stock_data) # create small single layer small rnn preds small_single_layer_rnn, small_one_layer_preds = create_single_layer_small_rnn_model( X_train, y_train, X_test, sc) # create single layer rnn preds single_layer_rnn, one_layer_preds = create_single_layer_rnn_model( X_train, y_train, X_test, sc) # rnn daily preds rnn_model, rnn_preds = create_rnn_model(X_train, y_train, X_test, sc) # gru daily preds gru_model, gru_preds = create_GRU_model(X_train, y_train, X_test, sc) # gru daily preds gru_drop_model, gru_drop_preds = create_GRU_with_drop_out_model( X_train, y_train, X_test, sc) # yearly preds yearly_preds = create_prophet_results(stock_data) # daily preds # prophet_daily_preds = create_prophet_daily_results(stock_data) # plot results plot_results(stock_data, stock_name, small_one_layer_preds, one_layer_preds, yearly_preds, gru_drop_preds, rnn_preds, gru_preds)I get the following error:
Error:NotImplementedError Traceback (most recent call last)
<ipython-input-11-8c4e928d8ca1> in <module>
337 # create small single layer small rnn preds
338 small_single_layer_rnn, small_one_layer_preds = create_single_layer_small_rnn_model(
--> 339 X_train, y_train, X_test, sc)
340
341 # create single layer rnn preds
<ipython-input-11-8c4e928d8ca1> in create_single_layer_small_rnn_model(X_train, y_train, X_test, sc)
118
119 # fit the RNN model
--> 120 model.fit(X_train, y_train, epochs=100, batch_size=150)
121
122 # Finalizing predictions
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py in _method_wrapper(self, *args, **kwargs)
106 def _method_wrapper(self, *args, **kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self, *args, **kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(step)
-> 1098 tmp_logs = train_function(iterator)
1099 if data_handler.should_sync:
1100 context.async_wait()
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds)
778 else:
779 compiler = "nonXla"
--> 780 result = self._call(*args, **kwds)
781
782 new_tracing_count = self._get_tracing_count()
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds)
821 # This is the first call of __call__, so we have to initialize.
822 initializers = []
--> 823 self._initialize(args, kwds, add_initializers_to=initializers)
824 finally:
825 # At this point we know that the initialization is complete (or less
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to)
695 self._concrete_stateful_fn = (
696 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access
--> 697 *args, **kwds))
698
699 def invalid_creator_scope(*unused_args, **unused_kwds):
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs)
2853 args, kwargs = None, None
2854 with self._lock:
-> 2855 graph_function, _, _ = self._maybe_define_function(args, kwargs)
2856 return graph_function
2857
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs)
3211
3212 self._function_cache.missed.add(call_context_key)
-> 3213 graph_function = self._create_graph_function(args, kwargs)
3214 self._function_cache.primary[cache_key] = graph_function
3215 return graph_function, args, kwargs
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
3073 arg_names=arg_names,
3074 override_flat_arg_shapes=override_flat_arg_shapes,
-> 3075 capture_by_value=self._capture_by_value),
3076 self._function_attributes,
3077 function_spec=self.function_spec,
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
984 _, original_func = tf_decorator.unwrap(python_func)
985
--> 986 func_outputs = python_func(*func_args, **func_kwargs)
987
988 # invariant: `func_outputs` contains only Tensors, CompositeTensors,
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds)
598 # __wrapped__ allows AutoGraph to swap in a converted function. We give
599 # the function a weak reference to itself to avoid a reference cycle.
--> 600 return weak_wrapped_fn().__wrapped__(*args, **kwds)
601 weak_wrapped_fn = weakref.ref(wrapped_fn)
602
~\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs)
971 except Exception as e: # pylint:disable=broad-except
972 if hasattr(e, "ag_error_metadata"):
--> 973 raise e.ag_error_metadata.to_exception(e)
974 else:
975 raise
NotImplementedError: in user code:
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function *
return step_function(self, iterator)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step **
outputs = model.train_step(data)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\training.py:747 train_step
y_pred = self(x, training=True)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:985 __call__
outputs = call_fn(inputs, *args, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\sequential.py:386 call
outputs = layer(inputs, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:663 __call__
return super(RNN, self).__call__(inputs, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:985 __call__
outputs = call_fn(inputs, *args, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:1573 call
inputs, mask=mask, training=training, initial_state=initial_state)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:735 call
inputs, initial_state, constants)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:862 _process_inputs
initial_state = self.get_initial_state(inputs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:646 get_initial_state
inputs=None, batch_size=batch_size, dtype=dtype)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:1385 get_initial_state
return _generate_zero_filled_state_for_cell(self, inputs, batch_size, dtype)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:2968 _generate_zero_filled_state_for_cell
return _generate_zero_filled_state(batch_size, cell.state_size, dtype)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:2986 _generate_zero_filled_state
return create_zeros(state_size)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\keras\layers\recurrent.py:2981 create_zeros
return array_ops.zeros(init_state_size, dtype=dtype)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
return target(*args, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\ops\array_ops.py:2747 wrapped
tensor = fun(*args, **kwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\ops\array_ops.py:2794 zeros
output = _constant_if_small(zero, shape, dtype, name)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\ops\array_ops.py:2732 _constant_if_small
if np.prod(shape) < 1000:
<__array_function__ internals>:6 prod
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\numpy\core\fromnumeric.py:3031 prod
keepdims=keepdims, initial=initial, where=where)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\numpy\core\fromnumeric.py:87 _wrapreduction
return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
C:\Users\james\miniconda3\envs\tensorflow-2.2\lib\site-packages\tensorflow\python\framework\ops.py:848 __array__
" a NumPy call, which is not supported".format(self.name))
NotImplementedError: Cannot convert a symbolic Tensor (sequential_10/simple_rnn_10/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
I think this is happening in the following code:plot_results(stock_data, stock_name, small_one_layer_preds, one_layer_preds, yearly_preds, gru_drop_preds, rnn_preds, gru_preds)I just ran sequential lines of code until the error occurred. I have tried many things, but I believe it s the right combination of python, tensorflow, numpy and h5py to get the error fixed. i just do not know that combination.
My current specsare:
Windwos 10
python - 3.7.0
numpy - 1.19.5
h5py - 2.10.0
tensorflow - 2.3.0
Any help appreciated.
Respectfully,
LZ