根据条件重塑神经网络输入

时间:2019-06-20 23:59:27

标签: numpy tensorflow keras neural-network deep-learning

使用DL神经网络的数值数据。我正在为此目的使用Keras库

    p   u   d    ms          action B   x    y-c pre    area       finger 
0   0   36  3   1334893336790   0   1   262 262 262     0.044444    0.0
1   0   36  3   1334893336790   2   1   262 271 0.32    0.044444    0.0
2   0   36  3   1334893336795   2   1   123 327 0.28    0.044444    0.0
3   0   36  3   1334893336800   1   1   123 327 0.28    0.044444    0.0
4   0   36  3   1334893336885   0   1   216 298 0.34    0.044444    0.0
5   0   36  3   1334893336907   2   1   216 298 0.38    0.044444    0.0
6   0   36  3   1334893336926   2   1   147 312 0.60    0.088889    0.0
7   0   36  3   1334893336949   2   1   115 328 0.63    0.044444    0.0
8   0   36  3   1334893336952   2   1   98  336 0.17    0.133333    0.0
9   0   36  3   1334893336971   1   1   98  336 0.17    0.133333    0.0
1   0   36  3   1334893337798   0   1   108 339 0.48    0.044444    0.0

下面的代码可以正常工作,但是据我了解,神经网络输入是逐行输入的,在这里,我试图基于 action列进行输入和输出,如下例所示:它以0开头并以1结束,然后包括从行[0到3] 3到神经网络的第一个输入,并且包括[4到9] 9个第二个输入,依此类推... “动作”列中的元素表示手的移动,如果值0表示手的手指按下屏幕,或者如果值1表示手从屏幕上抬起,那么我尝试将其划分为n个笔划,尝试根据手指的压力和提起力(行程)在神经网络上进行输入,基于此思想,输入将从900k减少到20k,但每次输入都是基于多行的

the first input will be as below:
        p   u   d    ms          action B   x    y-c pre    area       finger 
    0   0   36  3   1334893336790   0   1   262 262 262     0.044444    0.0
    1   0   36  3   1334893336790   2   1   262 271 0.32    0.044444    0.0
    2   0   36  3   1334893336795   2   1   123 327 0.28    0.044444    0.0
    3   0   36  3   1334893336800   1   1   123 327 0.28    0.044444    0.0

and the second input will be :
        p   u   d    ms          action B   x    y-c pre    area       finger 
    4   0   36  3   1334893336885   0   1   216 298 0.34    0.044444    0.0
    5   0   36  3   1334893336907   2   1   216 298 0.38    0.044444    0.0
    6   0   36  3   1334893336926   2   1   147 312 0.60    0.088889    0.0
    7   0   36  3   1334893336949   2   1   115 328 0.63    0.044444    0.0
    8   0   36  3   1334893336952   2   1   98  336 0.17    0.133333    0.0
    9   0   36  3   1334893336971   1   1   98  336 0.17    0.133333    0.0

这是我的代码,它在NN的正常循环中运行良好,但是我试图根据我的想法对其进行更改。

#o = no_of_click
o=0
lenf=len(dataset)
for h in dataset.index[dataset.iloc[:, 4] == 0]:
    if dataset.iloc[h+1,4]==1 :
        dataset.iloc[h+1,4]=-1
        dataset.iloc[h , 4] = -1
        o=o+1
dataset=dataset.drop(dataset[dataset.iloc[:, 4] == -1].index)
lenf=(o*2)
X = dataset.iloc[:, 2:].values #here 3to 11 for x
y = dataset.iloc[:, 1].values #here user id 2 only y

binariz = LabelBinarizer()
s = binariz.fit_transform(X[:, 0])
X = np.delete(X, [0], axis=1)
X = np.hstack([s,X])
y = binariz.fit_transform(y)
# X Features scaling
sc_X = StandardScaler()
X = sc_X.fit_transform(X)

# Splitting Data
X_train, X_test,y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

classifier = Sequential()
# Adding the input layer and the first hidden layer
classifier.add(Dense(units = 50, activation = 'relu', input_dim = X_train.shape[1]))
# Adding the second hidden layer

classifier.add(Dense(units = 50, activation = 'relu'))
# Adding the output layer
classifier.add(Dense(units = y.shape[1], activation = 'softmax'))
# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 100, epochs = 10)

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题;如果我做出错误的假设,请提前道歉。

在我看来,您是在问是否可以对输入向量进行整形,因此在一种情况下,它的形状为shape =(4,),在另一种情况下,形状为=(6,)。

我不相信您可以,因为当您在输入层之后添加一个Dense层时,该Dense层具有一个权重矩阵,其形状为(input_dims,output_dims)。构建图形时选择该选项。

即使您可以,我也不希望您这样做。 NN的输入向量是一组要素。在您的情况下,这似乎是一组不同的度量。您不希望在一种情况下使用输入张量位置0的feature0测量结果在另一种情况下使用Feature4的测量结果馈入网络。这样一来,网络就很难理解如何处理这些值。

鉴于您具有少量功能,是否有任何理由不只是一直传递所有数据?