簡體   English   中英

將神經網絡轉換為批量大小訓練

[英]Convert Neural network into batch size training

我有一個我上網的神經網絡代碼,所以我沒有完整的知識來完全理解它。 我正在使用 NN 進行命名實體識別。

這是我的詞嵌入的大小

wordEmbeddings.shape (38419, 100)

我正在使用以下神經網絡

words_input = Input(shape=(None,),dtype='int32',name='words_input')
words = Embedding(input_dim=wordEmbeddings.shape[0], output_dim=wordEmbeddings.shape[1],  weights=[wordEmbeddings], trainable=False)(words_input)

casing_input = Input(shape=(None,), dtype='int32', name='casing_input')
casing = Embedding(output_dim=caseEmbeddings.shape[1], input_dim=caseEmbeddings.shape[0], weights=[caseEmbeddings], trainable=False)(casing_input)

character_input=Input(shape=(None,52,),name='char_input')
embed_char_out=TimeDistributed(Embedding(len(char2Idx),30,embeddings_initializer=RandomUniform(minval=-0.5, maxval=0.5)), name='char_embedding')(character_input)
dropout= Dropout(0.5)(embed_char_out)
conv1d_out= TimeDistributed(Conv1D(kernel_size=3, filters=30, padding='same',activation='tanh', strides=1))(dropout)
maxpool_out=TimeDistributed(MaxPooling1D(52))(conv1d_out)
char = TimeDistributed(Flatten())(maxpool_out)
char = Dropout(0.5)(char)

output = concatenate([words, casing,char])
output = Bidirectional(LSTM(200, return_sequences=True, dropout=0.50, recurrent_dropout=0.25))(output)
output = TimeDistributed(Dense(len(label2Idx), activation='softmax'))(output)

model = Model(inputs=[words_input, casing_input,character_input], outputs=[output])
model.compile(loss='sparse_categorical_crossentropy', optimizer='nadam')
model.summary()

當我嘗試訓練我的模型時,它說我的 GPU 已耗盡:tensorflow.python.framework.errors_impl.ResourceExhaustedError

在詞嵌入代碼使用 wordEmbedding.shape[0] 這是 38419。這可能是問題嗎?? 以及如何將其轉換為批量訓練?

在特定時期,NN 使用的 nd 數組 (5828,10,200) 超過 1 千萬(太大了,這是我對 GPU 的限制)。

我寫了代碼,如果有任何地方這個限制已經耗盡,它會將批次分成 2 部分。 所以最后我得到的所有批次的 nd 陣列都小於 1 千萬,然后它在我的 GPU 上成功運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM