代码之家  ›  专栏  ›  技术社区  ›  Soerendip

Keras/TensorFlow是否只能处理每批固定大小的输入?

  •  0
  • Soerendip  · 技术社区  · 7 年前

    Here

    %pylab inline
    import random
    import string
    import numpy as np
    import tensorflow as tf
    from tensorflow.python.keras.models import Sequential
    from tensorflow.python.keras.layers import LSTM, TimeDistributed, Dense, SimpleRNN
    
    BATCH_SIZE = 1
    NAMESPACE = string.ascii_uppercase+string.digits
    NAMESPACELENGTH = len(NAMESPACE)
    
    def generate_encoding():
        encoding = {}
        for i, letter in enumerate(NAMESPACE):
            encoding[letter] = i
        return encoding
    
    ENCODING = generate_encoding()
    
    def letter_to_vec(letter):
        vec = np.zeros(NAMESPACELENGTH)
        vec[ENCODING[letter]] = 1
        return vec
    
    def word_to_matrix(word):
        return np.array([letter_to_vec(letter) for letter in word])
    
    def dummy_X_y(size=BATCH_SIZE):
        X = []
        y = []
        for N in np.random.randint(1, 100, size):
            tmp = ''.join(random.choice(NAMESPACE) for _ in range(N))
            X.append(tmp)
            y.append(len(tmp))
            del tmp
        return X, y
    
    print(dummy_X_y())
    
    
    def generate_model():
        model = Sequential()
        model.add(SimpleRNN(1, input_shape=(None, NAMESPACELENGTH), return_sequences=False))
        model.add(Dense(1, activation='linear'))
        model.compile(loss='mean_squared_error', 
                      optimizer='adam', metrics=['mean_squared_error'])
        return model
    
    model = generate_model()
    
    for _ in range(20000):
        # train LSTM
        # generate new random sequence
        X,y = dummy_X_y(size=BATCH_SIZE)
        X = np.array([word_to_matrix(x) for x in X])
        # fit model for one epoch on this sequence
        model.fit(X, y, epochs=1, batch_size=BATCH_SIZE, verbose=1)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   nuric    7 年前