我正在关注这个有关使用长期短期记忆单元(lstm)建立股市预测模型的python教程:https://towardsdatascience.com/getting-rich-quick-with-machine-learning-and-stock-market-predictions-696802da94fe
这是我的主要代码:
from sklearn import preprocessing
from keras.models import Model
from keras import optimizers
from Get_Data import Get_Data
from model import lstm_cell
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
days_in_history = 50
# MSFT = Microsoft stock prices
Get_Data.save_dataset('MSFT')
print('[INFO] preparing data...')
ohlcv_histories, next_day_open_values, unscaled_y, y_normaliser = Get_Data.csv_to_dataset('MSFT', days_in_history)
test_split = 0.9 # the percent of data to be used for testing
n = int(ohlcv_histories.shape[0] * test_split)
# splitting the dataset up into train and test sets
x_train = ohlcv_histories[:n]
y_train = next_day_open_values[:n]
x_test = ohlcv_histories[n:]
y_test = next_day_open_values[n:]
unscaled_y_test = unscaled_y[n:]
print('[INFO] compiling model...')
model = lstm_cell.build(days_in_history,5)
adam = optimizers.Adam(lr = 0.0005)
model.compile(optimizer=adam, loss='mse')
print('[INFO] training model...')
epochs = 50
batch_size = 32
print(type(x_train))
print(type(y_train))
# use fit instead of fit_generator instead bc we don't use data augmentation
H = model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs, shuffle=True, validation_split=0.1)
这是我的模型(model.py):
import keras
import tensorflow as tf
from keras.models import Model
from keras.layers import Dense, Dropout, LSTM, Input, Activation, concatenate
from keras import optimizers
import numpy as np
class lstm_cell:
def build(height, width):
np.random.seed(4)
lstm_input = Input(shape=(height, width), name='lstm_input')
x = LSTM(50, name='lstm_0')(lstm_input)
x = Dropout(0.2, name='lstm_dropout_0')(x)
x = Dense(64, name='dense_0')(x)
x = Activation('sigmoid', name='sigmoid_0')(x)
x = Dense(1, name='dense_1')(x)
output = Activation('linear', name='linear_output')(x)
model = Model(inputs=lstm_input, outputs=output)
adam = optimizers.Adam(lr=0.0005)
model.compile(optimizer=adam, loss='mse')
return model
当我使用model.fit()函数到达代码的最后一行时,我从终端收到此错误消息:
Traceback (most recent call last):
File "testing.py", line 42, in <module>
model.fit(x=ohlcv_train, y=y_train, batch_size=32, epochs=50, shuffle=True, validation_split=0.1)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 1239, in fit
validation_freq=validation_freq)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/keras/engine/training_arrays.py", line 196, in fit_loop
outs = fit_function(ins_batch)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py", line 3721, in __call__
value = ops.convert_to_tensor(value, dtype=tensor.dtype)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1314, in convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/tensor_conversion_registry.py", line 52, in _default_conversion_function
return constant_op.constant(value, dtype, name=name)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py", line 258, in constant
allow_broadcast=True)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py", line 266, in _constant_impl
t = convert_to_eager_tensor(value, ctx, dtype)
File "/Users/Mac/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py", line 96, in convert_to_eager_tensor
return ops.EagerTensor(value, ctx.device_name, dtype)
TypeError: float() argument must be a string or a number, not 'builtin_function_or_method'
我在不同的上下文中看到了其他人遇到相同的错误(这里是链接:TypeError: float() argument must be a string or a number, not 'builtin_function_or_method')。他/她在函数末尾缺少一对括号,但我似乎在代码中找不到相同的错误。我错过了什么吗,还是其他原因引起的错误?
如果有人有任何建议,请告诉我!谢谢!
我是否可以知道功能列表中是否有任何日期类型字段,请在培训中排除该列
参考:Pandas : TypeError: float() argument must be a string or a number