67449

[code]

    import numpy as np
    import matplotlib.pyplot as plt
    from keras.models import Sequential
    from keras.layers.core import Dense, Activation
    from keras.layers.recurrent import SimpleRNN
    from keras.optimizers import Adam
    from keras.callbacks import EarlyStopping
    from sklearn.model_selection import train_test_split
    from sklearn.utils import shuffle
    
    np.random.seed(0)
    
    def sin(x, T=100):
        return np.sin(2.0 * np.pi * x / T)
    
    def toy_problem(T=100, ampl=0.05):
        x = np.arange(0, 2 * T + 1)
        noise = ampl * np.random.uniform(low=-1.0, high=1.0, size=len(x))
        return sin(x) + noise
    
    '''
    データの生成
    '''
    T = 100
    f = toy_problem(T)
    length_of_sequences = 2 * T
    maxlen = 25  # ひとつの時系列データの長さ
    
    data = []
    target = []
    
    for i in range(0, length_of_sequences - maxlen + 1):
        data.append(f[i: i + maxlen])
        target.append(f[i + maxlen])
    
    X = np.array(data).reshape(len(data), maxlen, 1)
    Y = np.array(target).reshape(len(data), 1)
    
    # データ設定
    N_train = int(len(data) * 0.9)
    N_validation = len(data) - N_train
    
    X_train, X_validation, Y_train, Y_validation = \
        train_test_split(X, Y, test_size=N_validation)
    
    '''
    モデル設定
    '''
    n_in = len(X[0][0])  # 1
    n_hidden = 20
    n_out = len(Y[0])  # 1
    
    def weight_variable(shape, name=None):
        return np.random.normal(scale=.01, size=shape)
    
    early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1)
    
    model = Sequential()
    
    model.add(SimpleRNN(n_hidden,
                        kernel_initializer=weight_variable,
                        input_shape=(maxlen, n_in)))
    
    model.add(Dense(n_out, kernel_initializer=weight_variable))
    
    model.add(Activation('linear'))
    
    optimizer = Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
    
    model.compile(loss='mean_squared_error',
                  optimizer=optimizer)
    
    '''
    モデル学習
    '''
    epochs = 500
    batch_size = 10
    
    model.fit(X_train, Y_train,
              batch_size=batch_size,
              epochs=epochs,
              validation_data=(X_validation, Y_validation),
              callbacks=[early_stopping])
    
    '''
    出力を用いて予測
    '''
    truncate = maxlen
    
    Z = X[:1]  # 元データの最初の一部だけ切り出し
    
    original = [f[i] for i in range(maxlen)]
    predicted = [None for i in range(maxlen)]
    
    for i in range(length_of_sequences - maxlen + 1):
        z_ = Z[-1:]
        y_ = model.predict(z_)
        sequence_ = np.concatenate(
            (z_.reshape(maxlen, n_in)[1:], y_),
            axis=0).reshape(1, maxlen, n_in)
    
        Z = np.append(Z, sequence_, axis=0)
        predicted.append(y_.reshape(-1))
    
    '''
    グラフで可視化
    '''
    plt.rc('font', family='serif')
    plt.figure()
    plt.ylim([-1.5, 1.5])
    plt.plot(toy_problem(T, ampl=0), linestyle='dotted', color='#aaaaaa')
    plt.plot(original, linestyle='dashed', color='black')
    plt.plot(predicted, color='black')
    plt.show()
    
[/code]


CC BY-SA 4.0
2020-06-09T06:48:10.920
67446
2020-06-09T08:02:40.883
2020-06-09T07:06:02.860
3060
40548
question
python tensorflow keras
教科書通りのプログラムですが、実行ができません。エラーメッセージ「weight_variable() got an unexpected keyword argument 'dtype'」


添付していただいたコードを私の環境にコピーして実行してみたところ、おそらく希望の結果が得られました

私の環境を示しますので、必要であればモジュールやPythonのアップデートをしてみてください  
python: 3.7.5  
numpy :1.18.1  
scikit-learn :0.22  
scipy :1.4.1  
keras :2.2.4

## 更新

似たような問題に直面している質問を見つけました  
<https://teratail.com/questions/212547> 質問サイト  
<https://keras.io/ja/initializers/> 質問サイトの参考サイト  
この参考サイトページによると

> callable なオブジェクトを渡す場合には，初期化しようとする変数の shape と dtype を引数に取るように設計してください

ということで、dtypeの指定が必要だと思われます  
[![画像の説明をここに入力](https://i.stack.imgur.com/Bnv2v.png)](https://i.stack.imgur.com/Bnv2v.png)


CC BY-SA 4.0
2020-06-09T07:11:47.323
67449
2020-06-09T08:02:40.883
2020-06-09T08:02:40.883
19500
19500
67446
answer