簡體   English   中英

使用Tensorflow 2創建RNN

[英]Create a RNN with Tensorflow 2

我試圖用Python和Tensorflow 2a創建一個RNN,但我真的不確定我做了什么......預測結果是常數。 您如何看待數據准備?

### Create the data ###
training_data =    [[1,2], [4,5], [7,8]...] # here, input_size = 2
training_targets = [3,     6,     9...]
predict_data =     [[9,10], [12,13], [15,16]...] # predictions should be [11, 14, 17...]

### Imports ###
import numpy as np
import tensorflow as tf
from tensorflow.python import keras as tfk

### Parameters ###
batch_size = 8
time_steps = 64

### Create the model ###
model = tfk.Sequential()
model.add(tfk.layers.Bidirectional(tfk.layers.LSTM(128, return_sequences=True, input_shape=(time_steps, input_size))))
model.add(tfk.layers.Bidirectional(tfk.layers.LSTM(64, return_sequences=True)))
model.add(tfk.layers.Dropout(rate=0.05))
model.add(tfk.layers.Dense(32, activation='relu'))
model.add(tfk.layers.Dense(1, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

### Create the training dataset ###
# Separate data in time steps
data = np.array([training_data[i: i + time_steps] for i in range(len(training_data) - time_steps)])
targets = np.array([training_targets[i: i + time_steps] for i in range(len(training_argets) - time_steps)])
# Create the tensors and dataset
data = tf.convert_to_tensor(data)
targets = tf.convert_to_tensor(targets)
dataset = tf.data.Dataset.from_tensor_slices((data, targets))
# Batch data, the data shape is : (batch_size, time_steps, input_size)
dataset = dataset.batch(batch_size)

### Train the model ###
model.fit(dataset, epochs=10, validation_data=validation_dataset, shuffle=False)

### Create the predict data ###
data = np.array([predict_data[i: i + time_steps] for i in range(len(predict_data) - time_steps)])
data = tf.convert_to_tensor(data)

### Try the model ###
results = model.predict(data, steps=time_steps)

預測應該是[11,14,17 ...]但它就像是不變的並且形狀奇怪:

[
[[1], [1], [1], [1] ...],
[[1], [1], [1], [1] ...],
...
]

謝謝你的幫助!

你的最后一層只有一個神經元。 想一想。 您的所有網絡都可以返回一個數字,但這個數字毫無意義,因為對於您的所有訓練數據,它永遠不知道您希望它做什么。 問題是,當它更適合作為回歸問題時,您將此作為分類問題。 取出最后一層的softmax,並使用MSE作為損失度量。

此外,似乎只有2個時間步,但你的代碼暗示有64個。這對我來說沒有意義。

此外,您在哪里定義'input_size'。 它不包含在上面的代碼中。

再考慮一下這個問題,做出那些改變,希望它會起作用。 我會嘗試自己運行它,但我不想對你的訓練數據和目標做出假設。

暫無
暫無

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

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