【问题标题】:Issue with Python Neural Network Code (Keras)Python 神经网络代码 (Keras) 的问题
【发布时间】:2017-05-24 21:47:07
【问题描述】:

我想建立一个神经网络模型,假设 100 行的数据被分成 5 个堆栈,每个堆栈 20 行,现在我不想一次遍历所有数据,而是想基于前 20 行构建一个神经网络数据(即第一个堆栈),然后保存模型(权重等),然后将下一个堆栈(接下来的 20 行,即第 21-40 行)传递到更新的模型(即从以前的模型更新的权重),等等。有人能告诉我这种类型的神经网络叫什么吗? 我昨天刚刚尝试了我的第一个神经网络,我在其中批量迭代所有数据(我相信这发生在一个时期而不是多个时期)。

以下是我使用 Keras(Tensorflow 后端)在 Python 中制作的神经网络,有人可以建议我根据我的要求进行编辑以制作以下模型吗?

# Create first network with Keras
from keras.models import Sequential
from keras.layers import Dense
import numpy
import pandas as pd
# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)

# load dataset
raw_data = pd.read_excel('Data.xlsx',sep=',')
df = raw_data.iloc[:,0:2]

df = pd.get_dummies(df)
rows,cols = df.shape
output_dim = 7 # No. of Output Dimensions/Categories

#Splitting Data in Training & Testing
X_train,X_test,y_train,y_test = train_test_split(df.iloc[:,0:cols-output_dim],df.iloc[:,cols-output_dim:cols],test_size=0.2,random_state=seed)

X  = X_train.as_matrix()
X_test = X_test.as_matrix()
Y = y_train.as_matrix()
Y_test = y_test.as_matrix()


# create model
model = Sequential()
model.add(Dense(X.shape[1], input_dim=X.shape[1], activation='relu')) #Input Layer
model.add(Dense(X.shape[1], activation='relu')) #Hidden Layer
model.add(Dense(X.shape[1], activation='relu')) #Hidden Layer
model.add(Dense(X.shape[1], activation='relu')) #Hidden Layer
model.add(Dense(output_dim, activation='softmax')) #Output Layer

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(X,Y,nb_epoch=10, validation_data=(X_test,Y_test), batch_size=83,verbose=1)

# evaluate the model
loss, accuracy = model.evaluate(X1, Y1)
print("\nValidation Data [Loss: %.2f, Accuracy: %.2f%%]" % (loss, accuracy*100))

【问题讨论】:

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


    【解决方案1】:

    听起来您想以 20 大小的 minibatch 对数据进行训练,并在每个 minibatch 后保存模型。您无需为此更改输入数据的形状 - 形状矩阵 (nb_datapoints, nb_features) 有效。请确保在调用model.fit() 时指定batch_size=20

    为了在每次 minibatch 后保存您的模型,请查看 Keras callbacks。您需要编写自己的自定义回调,但您可以在现有的 ModelCheckpoint 回调之后对其进行建模 - 在每个 epoch 之后保存模型,因此根据您的需要对其进行自定义应该相对简单。

    【讨论】:

    • 是的,你得到了我想要的,当然我会试试的,虽然你能说明我为什么要使用 batch_size=10 吗?
    • 好的,在我的情况下,还有一件事我希望它完成一个小批量的所有时期,更新权重,然后使用更新的权重继续第二个小批量,因此上述调整会处理是吗?
    • 一个纪元根据定义是对所有数据的完整运行。但是权重仅在每个 minibatch 后更新,所以上面的方法应该做你想做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多