Raj*_*rry 5 python machine-learning reshape keras
from random import randint
from random import seed
import math
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense,TimeDistributed,RepeatVector
seed(1)
def ele():
X,y = [],[]
for i in range(1):
l1=[]
for _ in range(2):
l1.append(randint(1,10))
X.append(l1)
y.append(sum(l1))
for i in range(1):
X = str(X[0][0])+'+'+str(X[0][1])
y = str(y[0])
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
Xenc,yenc = [],[]
for pattern in X:
integer_encoded = [char_to_int[char] for char in pattern]
Xenc.append(integer_encoded[0])
for pattern in y:
integer_encoded = [char_to_int[char] for char in pattern]
yenc.append(integer_encoded[0])
k,k1 = [],[]
for i in range(1):
for j in Xenc:
vec = np.zeros(11)
vec[j] = 1
k.append(vec)
for j in yenc:
vec1 = np.zeros(11)
vec1[j] = 1
k1.append(vec1)
k = np.array(k)
k1 = np.array(k1)
return k,k1
alphabet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+']
model = Sequential()
model.add(LSTM(100, input_shape=(n_in_seq_length,11)))
model.add(RepeatVector(2))
model.add(LSTM(50, return_sequences=True))
model.add(TimeDistributed(Dense(n_chars, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
for i in range(1):
X,y = ele()
#X = np.reshape(X, (4,1,11))
model.fit(X, y, epochs=1, batch_size=10)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
() 中的 ValueError Traceback(最近一次调用最后一次) 53 X,y = ele() 54 #X = np.reshape(X, (4,1,11)) ---> 55 model.fit(X, y,纪元=1,batch_size=10)
~\Anaconda3\lib\site-packages\keras\engine\training.py 中的 fit(self, x, y, batch_size, epochs, verbose, 回调,validation_split,validation_data,shuffle,class_weight,sample_weight,initial_epoch,steps_per_epoch,validation_steps, **kwargs) 948sample_weight=sample_weight, 949 class_weight=class_weight, --> 950batch_size=batch_size) 951 # 准备验证数据。第952章
~\Anaconda3\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, Sample_weight, class_weight, check_array_lengths, batch_size) 747 feed_input_shapes, 748 check_batch_axis=False, # 不强制批量大小。--> 749 exception_prefix='input') 750 751 如果 y 不是 None:
〜\Anaconda3\lib\site-packages\keras\engine\training_utils.py 在 standardize_input_data(数据、名称、形状、check_batch_axis、Exception_prefix) 125 ': 预期 ' + 名称[i] + ' 具有 ' + 126 str(len (shape)) + ' 维度,但得到数组 ' --> 127 'with shape ' + str(data_shape)) 128 if not check_batch_axis: 129 data_shape = data_shape[1:]
ValueError:检查输入时出错:预期 lstm_42_input 有 3 个维度,但得到形状为 (4, 11) 的数组
代码中存在重塑数据的问题。对于重塑 cf检查模型输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (339732, 29)和https://github.com/keras-team/keras/issues/5214的数组。[在Python数组中,和的数量]表示数组的维数
TimeDistributed层在代码中至少需要两个timestep=3时间步,您有一个,在下面的代码中使用是因为 33 不能被 2 整除。一般情况下,TimeDistributed层用于实现一对多和多对多配置,参见https: //github.com/keras-team/keras/issues/1029
以下代码有效,针对1 个样本(batch_size)、3 个时间步长、11 个特征完成重塑:
from random import randint
from random import seed
import math
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense,TimeDistributed,RepeatVector
seed(1)
def ele():
X,y = [],[]
for i in range(1):
l1=[]
for _ in range(2):
l1.append(randint(1,10))
X.append(l1)
y.append(sum(l1))
for i in range(1):
X = str(X[0][0])+'+'+str(X[0][1])
y = str(y[0])
char_to_int = dict((c, i) for i, c in enumerate(alphabet))
Xenc,yenc = [],[]
for pattern in X:
integer_encoded = [char_to_int[char] for char in pattern]
Xenc.append(integer_encoded[0])
for pattern in y:
integer_encoded = [char_to_int[char] for char in pattern]
yenc.append(integer_encoded[0])
k,k1 = [],[]
for i in range(1):
for j in Xenc:
vec = np.zeros(11)
vec[j] = 1
k.append(vec)
for j in yenc:
vec1 = np.zeros(11)
vec1[j] = 1
k1.append(vec1)
k = np.array(k)
k1 = np.array(k1)
return k,k1
alphabet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+']
n_chars = 11
for i in range(1):
X,y = ele()
print('X not reshaped :', X)
print('y not reshaped :', y)
# timestep = 3, batch_size =1, input_dim = nb_features = 11
X = np.reshape(X, (1,X.shape[0],X.shape[1]))
y = np.reshape(y, (1,y.shape[0],y.shape[1]))
print('X reshaped :', X)
print('y reshaped :', y)
print(' X.shape[0] :', X.shape[0])
print(' X.shape[1] :', X.shape[1])
print(' X.shape[2] :', X.shape[2])
model = Sequential()
model.add(LSTM(100, input_shape=(X.shape[1],X.shape[2])))
model.add(RepeatVector(2))
model.add(LSTM(50, return_sequences=True))
model.add(TimeDistributed(Dense(n_chars, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=1, batch_size=10)
Run Code Online (Sandbox Code Playgroud)