Tensorflow keras输入层(Nnoe,2)具有LSTM,但没有';行不通
我尝试创建样本,它们是X_列和y_列 这两个样本的格式和我的真实数据相似 代码就是我用的 这是我的密码:Tensorflow keras输入层(Nnoe,2)具有LSTM,但没有';行不通,tensorflow,deep-learning,keras,lstm,rnn,Tensorflow,Deep Learning,Keras,Lstm,Rnn,我尝试创建样本,它们是X_列和y_列 这两个样本的格式和我的真实数据相似 代码就是我用的 这是我的密码: import matplotlib.pyplot as plt import numpy as np import time import csv import keras from keras.models import Sequential from keras.layers.core import Dense, Activation, Dropout from keras.layers
import matplotlib.pyplot as plt
import numpy as np
import time
import csv
import keras
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.layers.core import Masking
from keras.layers.wrappers import TimeDistributed
from openpyxl import load_workbook
from datetime import datetime
X_arryA = np.array([[1, 2],[3, 8],[9, 10],[6, 7]])
X_arryB = np.array([[1, 2],[3, 8]])
X_arryC = np.array([[1, 2],[3, 8],[9, 10],[6, 7],[9, 10],[6, 7]])
X_train = np.array([X_arryA,X_arryB,X_arryC])
y_arryA = np.array([1,5,3,4])
y_arryB = np.array([2,1])
y_arryC = np.array([6,7,4,2,3,1])
y_train = np.array([y_arryA,y_arryB,y_arryC])
model = Sequential()
layers = [2, 50, 100, 1]
model.add(LSTM(
input_shape=(None, 2),
output_dim=layers[1],
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
layers[2],
return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(
output_dim=layers[3]))
model.add(Activation("linear"))
start = time.time()
model.compile(loss="mse", optimizer="rmsprop")
#print "Compilation Time : ", time.time() - start
model.summary()
model.fit(X_train, y_train, batch_size=1, nb_epoch=1, validation_split=0.05)
我已经检查了model.summary()
我认为结构是好的
一些信息显示:
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\ipykernel_launcher.py:14: UserWarning: Update your `LSTM` call to the Keras 2 API: `LSTM(units=50, input_shape=(None, 2), return_sequences=True)`
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_77 (LSTM) (None, None, 50) 10600
_________________________________________________________________
dropout_65 (Dropout) (None, None, 50) 0
_________________________________________________________________
lstm_78 (LSTM) (None, 100) 60400
_________________________________________________________________
dropout_66 (Dropout) (None, 100) 0
_________________________________________________________________
dense_36 (Dense) (None, 1) 101
_________________________________________________________________
activation_33 (Activation) (None, 1) 0
=================================================================
Total params: 71,101
Trainable params: 71,101
Non-trainable params: 0
_________________________________________________________________
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\ipykernel_launcher.py:23: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(units=1)`
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\keras\models.py:848: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
warnings.warn('The `nb_epoch` argument in `fit` '
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-509-c6f954bdb474> in <module>()
28 #print "Compilation Time : ", time.time() - start
29 model.summary()
---> 30 model.fit(X_train, y_train, batch_size=1, nb_epoch=1, validation_split=0.05)
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\keras\models.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs)
865 class_weight=class_weight,
866 sample_weight=sample_weight,
--> 867 initial_epoch=initial_epoch)
868
869 def evaluate(self, x, y, batch_size=32, verbose=1,
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\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, **kwargs)
1520 class_weight=class_weight,
1521 check_batch_axis=False,
-> 1522 batch_size=batch_size)
1523 # Prepare validation data.
1524 do_validation = False
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size)
1376 self._feed_input_shapes,
1377 check_batch_axis=False,
-> 1378 exception_prefix='input')
1379 y = _standardize_input_data(y, self._feed_output_names,
1380 output_shapes,
C:\Users\user\Anaconda3\envs\py35\lib\site-packages\keras\engine\training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
130 ' to have ' + str(len(shapes[i])) +
131 ' dimensions, but got array with shape ' +
--> 132 str(array.shape))
133 for j, (dim, ref_dim) in enumerate(zip(array.shape, shapes[i])):
134 if not j and not check_batch_axis:
ValueError: Error when checking input: expected lstm_77_input to have 3 dimensions, but got array with shape (3, 1)
C:\Users\user\Anaconda3\envs\py35\lib\site packages\ipykernel\u launcher.py:14:UserWarning:更新对Keras 2 API的'LSTM'调用:`LSTM(单位=50,输入形状=(无,2),返回序列=True)`
_________________________________________________________________
层(类型)输出形状参数
=================================================================
lstm_77(lstm)(无,无,50)10600
_________________________________________________________________
辍学(辍学)(无、无、50)0
_________________________________________________________________
lstm_78(lstm)(无,100)60400
_________________________________________________________________
辍学(辍学)(无,100)0
_________________________________________________________________
致密(致密)(无,1)101
_________________________________________________________________
激活_33(激活)(无,1)0
=================================================================
总参数:71101
可培训参数:71101
不可训练参数:0
_________________________________________________________________
C:\Users\user\Anaconda3\envs\py35\lib\site packages\ipykernel_launcher.py:23:UserWarning:更新对Keras 2 API的'densite'调用:'densite(units=1)`
C:\Users\user\Anaconda3\envs\py35\lib\site packages\keras\models.py:848:UserWarning:fit中的'nb_epoch'参数已重命名为'epochs'。
warnings.warn('fit'中的'nb_epoch'参数)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
28#打印“编译时间:”,Time.Time()-开始
29范本摘要()
--->30模型拟合(X列、y列、批量尺寸=1、nb列=1、验证列=0.05)
C:\Users\user\Anaconda3\envs\py35\lib\site packages\keras\models.py适合(self、x、y、批大小、历元、详细、回调、验证分割、验证数据、随机排列、类权重、样本权重、初始历元、**kwargs)
865级重量=级重量,
866样品重量=样品重量,
-->867初始_历元=初始_历元)
868
869 def评估(自我、x、y、批次大小=32、详细=1、,
C:\Users\user\Anaconda3\envs\py35\lib\site packages\keras\engine\training.py in fit(self、x、y、批大小、历元、详细、回调、验证分割、验证数据、混洗、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、**kwargs)
1520级重量=级重量,
1521检查批次轴=错误,
->1522批次大小=批次大小)
1523#准备验证数据。
1524 do_验证=错误
C:\Users\user\Anaconda3\envs\py35\lib\site packages\keras\engine\training.py in\u-standard\u-user\u数据(自身、x、y、样本重量、类别重量、检查批次轴、批次大小)
1376自输入形状,
1377检查批次轴=错误,
->1378异常(前缀为“输入”)
1379 y=\u标准化\u输入\u数据(y,自。\u输入\u输出\u名称,
1380个输出_形,
C:\Users\user\Anaconda3\envs\py35\lib\site packages\keras\engine\training.py in\u standard\u input\u data(数据、名称、形状、检查批处理轴、异常前缀)
130'具有'+str(长度(形状[i]))+
131'维度,但得到了具有形状的数组'+
-->132 str(数组形状))
133对于枚举(zip(array.shape,shapes[i])中的j,(dim,ref_dim):
134如果不是j且不检查批次轴:
ValueError:检查输入时出错:预期lstm_77_输入有3个维度,但得到了形状为(3,1)的数组
我花了5个小时来解决这个问题,但仍然不起作用
任何帮助。我很感激。LSTM层只接受
(numberofsequence、numberOfSteps、featuresPerStep)
这些是错误消息中提到的3个预期维度。
您需要正确准备数据以适应这些维度
问题是numpy数组不能接受可变大小。它必须是一个定义良好的矩阵
当您为numpy数组指定3个不同长度的X_arry
时,结果不可能适合一个numpy数组,而是生成一个数组数组。(Keras无法处理此问题,它需要单个阵列)
使用可变长度,您必须使用虚拟值填充每个数组并添加一个层,或者只需单独训练每个长度
X_arryLen4 = np.asarray([[[1, 2],[3, 8],[9, 10],[6, 7]]])
X_arryLen2 = np.asarray([[[1, 2],[3, 8]]])
X_arryLen6 = np.asarray([[[1, 2],[3, 8],[9, 10],[6, 7],[9, 10],[6, 7]]])
model.fit(X_arryLen4, .....)
model.fit(X_arryLen2, .....)
model.fit(X_arryLen6, .....)
可能有帮助的答案:
(NumberOfVideos,NOF,FeaturesPerS