Как я могу получить выходное значение каждого слоя с керасом? - PullRequest
0 голосов
/ 18 мая 2018

Я хочу использовать keras Lstm для получения функций временного ряда, а затем использовать функции для Kmeans.Но сейчас я не могу получить выходные значения слоев.Как я могу получить выходные значения слоев?

Это моя сеть lstm


Слой (тип) Выходная форма Параметр #

lstm_66 (LSTM) (Нет,Нет, 50) 10400


lstm_67 (LSTM) (нет, 100) 60400


плотность_19 (плотное) (нет, 1) 101


активации_19 ​​(активация) (нет, 1) 0

Я хочу получить выходные значения lstm_67, мой код:

import keras.backend as K
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 
import tensorflow as tf
sess = tf.Session()
sess.run(tf.global_variables_initializer())
import numpy as np
statesAll=[]
layers = model.layers
print layers[1].output,type(layers[1].output[1]),sess.run(layers[1].output)

и результат:

Tensor ("lstm_61 / TensorArrayReadV3: 0", shape = (?, 100), dtype = float32)

Итак, как мне получить выходное значение слоев?

Спасибо!

Но это не работает, мой код:

def load_data(file_name, sequence_length=10, split=0.8):
    df = pd.read_csv(file_name, sep=',', usecols=[1])
    data_all = np.array(df).astype(float)
    scaler = MinMaxScaler()
    data_all = scaler.fit_transform(data_all)
    data = []
    print len(data_all)
    for i in range(len(data_all) - sequence_length - 1):
        data.append(data_all[i: i + sequence_length + 1])

    reshaped_data = np.array(data).astype('float64')
    np.random.shuffle(reshaped_data)
    x = reshaped_data[:, :-1]
    y = reshaped_data[:, -1]
    split_boundary = int(reshaped_data.shape[0] * split)
    train_x = x[: split_boundary]
    test_x = x[split_boundary:]

    train_y = y[: split_boundary]
    test_y = y[split_boundary:]

    return train_x, train_y, test_x, test_y, scaler

def build_model(n_samples, time_steps, input_dim):
    model = Sequential()
    model.add(LSTM(input_dim=1, output_dim=50,return_sequences=True))
    model.add(LSTM(100, return_sequences=False))
    model.add(Dense(output_dim=1))
    model.add(Activation('linear'))
    model.compile(loss='mse', optimizer='rmsprop')
    print(model.layers)
    return model

def train_model(train_x, train_y, test_x, test_y):
    model = build_model()
    model.fit(train_x, train_y, batch_size=128, nb_epoch=30,validation_split=0.1)
    return model


train_x, train_y, test_x, test_y, scaler = load_data(file path)
train_x = np.reshape(train_x, (train_x.shape[0], train_x.shape[1], 1))
test_x = np.reshape(test_x, (test_x.shape[0], test_x.shape[1], 1))

model = train_model(train_x, train_y, test_x, test_y)

from keras import backend as K
layers = model.layers
K.eval(layers[1].output)

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Прежде всего, это тензор, вам нужно использовать метод tf. Print (), чтобы увидеть конкретное значение.Если вы используете Spyder, вы не увидите эту информацию в консоли.Вам необходимо выполнить эту программу в командной строке.

0 голосов
/ 18 мая 2018

keras.backend.eval() следует сделать.

Посмотрите документацию здесь и здесь

...