91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python構建深度學習模型

發布時間:2022-01-25 09:15:39 來源:億速云 閱讀:249 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么用Python構建深度學習模型”,在日常操作中,相信很多人在怎么用Python構建深度學習模型問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python構建深度學習模型”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. 獲取訓練原始數據

我使用 JDK 的源代碼作為訓練數據。可在此處獲得。我們正在構建一個序列到序列的預測模型,輸入序列是字符序列。每個 .java 文件都會被掃描并聚合到一個名為“jdk-chars.txt”的文件中。此外,注釋被忽略,因為我們希望 AI 程序員學習如何編碼。注釋會使數據變得嘈雜。

以下代碼讀取 jdk-chars.txt 并將其切片以適合我的桌面的硬件功能。就我而言,我只使用了代碼中顯示的代碼的 20%。

path = "./jdk-chars.txt"
text = open(path).read()
slice = len(text)/5
slice = int(slice)
 
# slice the text to make training faster
text = text[:slice]
 
print('# of characters in file:', len(text))

2. 建立索引以尋址字符

LSTM 輸入只能理解數字,所以首先我們需要為每個字符分配一個唯一的整數。

例如,如果代碼中有 65 個唯一字符,我們為 65 個字符中的每個字符分配一個數字。下面的代碼用 [“{” : 0 ] [ “a” : 1 ], ... ] 這樣的條目構建了一個字典。還生成反向字典用于解碼 LSTM 的輸出。

chars = sorted(list(set(text)))
print('# of unique chars:', len(chars))
char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))

3. 準備帶標簽的訓練序列

接下來,我們需要準備帶有標簽的訓練數據。X 是我們定義的特定長度的序列(在我的例子中是 40),y 是序列的下一個字符。例如,從以下行:

int weekOfYear = isSet(WEEK_OF_YEAR) ? field[MAX_FIELD + WEEK_OF_YEAR] : 1; ... ...

X 的樣本是

int weekOfYear = isSet(WEEK_OF_YEAR) ? fi

y 是下一個字符

e

在這里,我們將文本剪切為 40 個字符的冗余序列。

NUM_INPUT_CHARS = 40
STEP = 3
sequences = []
next_chars = []
 
for i in range(0, len(text) - NUM_INPUT_CHARS, STEP):
    sequences.append(text[i: i + NUM_INPUT_CHARS])
    next_chars.append(text[i + NUM_INPUT_CHARS])
 
print('# of training samples:', len(sequences))

我們正在嘗試構建一個具有如下結構的網絡:

怎么用Python構建深度學習模型

4. 向量化訓練數據

準備好訓練數據后,需要將其轉換為向量。由于我們在第二步中準備了char_indicesindices_char,下面的代碼可以輕松地將我們的訓練數據轉換為使用 one-hot 編碼的向量。例如,索引為 11 的字符將是所有 0 和位置 11 處的 1 的向量。

print('Vectorize training data')
X = np.zeros((len(sequences), NUM_INPUT_CHARS, len(chars)), dtype=np.bool)
y = np.zeros((len(sequences), len(chars)), dtype=np.bool)
for i, sequence in enumerate(sequences):
    for t, char in enumerate(sequence):
        X[i, t, char_indices[char]] = 1
    y[i, char_indices[next_chars[i]]] = 1

5. 構建單層 LSTM 模型

下面的代碼定義了神經網絡的結構。該網絡包含一層具有 128 個隱藏單元的 LSTM。所述input_shape參數指定輸入序列長度(NUM_INPUT_CHARS)和輸入的每個時間(唯一的字符,即,尺寸),在尺寸。

print('Build model...')
model = Sequential()
model.add(LSTM(128, input_shape=(NUM_INPUT_CHARS, len(chars))))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
 
optimizer = RMSprop(lr=0.01)
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
print(model.summary())

最后的 Dense() 層是一個帶有 softmax 激活的輸出層,允許對輸入向量進行 len(chars) 方式分類。在訓練期間,反向傳播時間從輸出層開始,因此選擇優化器 = rmsprop 可以起到重要作用。注意 LSTM 是 Keras 中的輸出層。

Optimizer 是優化函數。如果你不知道這個術語,你可能熟悉邏輯回歸中常用的優化函數——隨機梯度下降。這是類似的事情。

最后一行指定了成本函數。在這種情況下,我們使用“categorical_crossentropy”。

6.訓練模型和生成Java代碼

sample 函數用于從概率數組中采樣一個索引。例如,給定 preds=[0.5,0.2,0.3] 和默認溫度,該函數將以概率 0.5 返回索引 0,以概率 0.2 返回索引 1,或以概率 0.3 返回索引 2。它用于避免一遍又一遍地生成相同的序列。我們希望看到 AI 程序員可以編寫的一些不同的代碼序列。

# train the model, output generated text after each iteration
for iteration in range(1, 60):
    print()
    print('-' * 50)
    print('Iteration', iteration)
    model.fit(X, y, batch_size=128, epochs=1)
 
    start_index = random.randint(0, len(text) - NUM_INPUT_CHARS - 1)
 
    for diversity in [0.2, 0.5, 1.0, 1.2]:
        print()
        print('----- diversity:', diversity)
 
        generated = ''
        sequence = text[start_index: start_index + NUM_INPUT_CHARS]
        generated += sequence
        print('----- Generating with seed: "' + sequence + '"')
        sys.stdout.write(generated)
 
        for i in range(400):
            x = np.zeros((1, NUM_INPUT_CHARS, len(chars)))
            for t, char in enumerate(sequence):
                x[0, t, char_indices[char]] = 1.
 
            preds = model.predict(x, verbose=0)[0]
            next_index = sample(preds, diversity)
            next_char = indices_char[next_index]
 
            generated += next_char
            sequence = sequence[1:] + next_char
 
            sys.stdout.write(next_char)
            sys.stdout.flush()
        print()

7. 結果

訓練模型需要幾個小時。最后生成的代碼如下所示:

----- diversity: 1.2
----- Generating with seed: "eak positions used by next()
// and prev"

eak positions used by next()
// and previos < 
als.get[afip(lookupFDataNtIndexPesicies- > = nuls.simys);
} e.apfwn 0;
for;
rerendenus = contaroyCharset() :
Attch ;
margte.adONamel = getScale(); i  {
int exponentace = sed, off endexpVal.vilal = 0,
break;
localicIntLullAtper.sudid);
}
void fam();
;
if (offset:
b = t);
if (false;
private byte[] is(-notren} fig ist[(i = 0)
molInd);
if (end < = mame") inie = torindLotingenFiols.INFGNTR_FIELD_(ne

生成的代碼沒有多大意義,甚至沒有編譯。但是我們仍然可以看到 LSTM 捕獲了一些單詞和語法。例如,“void fam();”。你還可以查看在早期迭代中生成的代碼。他們的意義不大。

到此,關于“怎么用Python構建深度學習模型”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳州市| 登封市| 临漳县| 昌邑市| 普兰店市| 东莞市| 田阳县| 织金县| 炉霍县| 九龙城区| 吉木乃县| 中山市| 含山县| 澜沧| 湛江市| 抚顺市| 丰都县| 五河县| 板桥市| 鹿邑县| 巴青县| 仙桃市| 庆城县| 凤翔县| 富蕴县| 新疆| 肥东县| 上栗县| 平湖市| 日照市| 洛宁县| 金山区| 西盟| 三穗县| 沅江市| 博爱县| 涡阳县| 乌兰县| 洛阳市| 河东区| 麻城市|