閲覧頂きありがとうございます。
Dockerのコンテナ内でvscodeを使ってmnistのコードを実行したところ、54行目のplt.imsave('tmp.png', decoded_img[1])でValueErrorが出てしまいました。解決法がわかる方は教えていただけると幸いです。
実行環境はUbuntu18.04, Python3.6.9です。
Package Version -------------------- --------------- absl-py 0.13.0 asn1crypto 0.24.0 astor 0.8.1 autopep8 1.5.7 cached-property 1.5.2 cachetools 4.2.2 certifi 2021.5.30 chardet 4.0.0 cryptography 2.1.4 cycler 0.10.0 dataclasses 0.8 gast 0.2.2 google-auth 1.31.0 google-auth-oauthlib 0.4.4 google-pasta 0.2.0 grpcio 1.38.0 h5py 3.1.0 idna 2.6 importlib-metadata 4.5.0 joblib 1.0.1 Keras-Applications 1.0.8 Keras-Preprocessing 1.1.2 keyring 10.6.0 keyrings.alt 3.0 kiwisolver 1.3.1 Markdown 3.3.4 matplotlib 3.3.4 numpy 1.19.5 oauthlib 3.1.1 opt-einsum 3.3.0 Pillow 8.2.0 pip 21.1.2 protobuf 3.17.3 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycodestyle 2.7.0 pycrypto 2.6.1 pygobject 3.26.1 pyparsing 2.4.7 python-apt 1.6.5+ubuntu0.6 python-dateutil 2.8.1 pyxdg 0.25 requests 2.25.1 requests-oauthlib 1.3.0 rsa 4.7.2 scikit-learn 0.24.2 scipy 1.4.1 SecretStorage 2.3.1 setuptools 57.0.0 six 1.16.0 tensorboard 2.1.1 tensorflow 2.1.0 tensorflow-estimator 2.1.0 termcolor 1.1.0 threadpoolctl 2.1.0 toml 0.10.2 typing-extensions 3.10.0.0 unattended-upgrades 0.1 urllib3 1.26.5 Werkzeug 2.0.1 wheel 0.30.0 wrapt 1.12.1 zipp 3.4.1
python
1# pylint: disable=import-error 2import tensorflow as tf 3from tensorflow.keras.layers import Input, Dense 4from tensorflow.keras.models import Model 5from tensorflow.keras.datasets import mnist 6import numpy as np 7from sklearn.model_selection import train_test_split 8import matplotlib.pyplot as plt 9# pylint: enable=import-error 10 11# encoderの次元 12encoding_dim = 32 13 14# 入力用の変数 15input_img = Input(shape=(784, )) 16# 入力された画像がencodeされたものを格納する変数 17encoded = Dense(encoding_dim, activation='relu')(input_img) 18# ecnodeされたデータを再構成した画像を格納する変数 19decoded = Dense(784, activation='sigmoid')(encoded) 20# 入力画像を再構成するModelとして定義 21autoencoder = Model(input_img, decoded) 22 23# 入力する画像をencodeする部分 24encoder = Model(input_img, encoded) 25encoded_input = Input(shape=(encoding_dim, )) 26decoder_layer = autoencoder.layers[-1] 27# encodeされた画像データを再構成する部分 28decoder = Model(encoded_input, decoder_layer(encoded_input)) 29 30# Adamで最適化, loss関数はbinary_crossentropy 31autoencoder.compile(optimizer='adam', loss='binary_crossentropy') 32 33# MNISTデータを前処理する 34(x_train, _), (x_test, _) = mnist.load_data() 35x_train, x_valid = train_test_split(x_train, test_size=0.175) 36x_train = x_train.astype('float32')/255. 37x_valid = x_valid.astype('float32')/255. 38x_test = x_test.astype('float32')/255. 39x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) 40x_valid = x_valid.reshape((len(x_valid), np.prod(x_valid.shape[1:]))) 41x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) 42 43# autoencoderの実行 44autoencoder.fit(x_train, x_train, 45 epochs=50, 46 batch_size=256, 47 shuffle=True, 48 validation_data=(x_valid, x_valid)) 49 50# 画像化して確認 51encoded_img = encoder.predict(x_test) 52decoded_img = decoder.predict(encoded_img) 53 54plt.imsave('tmp.png', decoded_img[1]) ###エラー箇所 55 56n = 10 57plt.figure(figsize=(20, 4)) 58for i in range(n): 59 ax = plt.subplot(2, n, i+1) 60 plt.imshow(x_test[i].reshape(28, 28)) 61 plt.gray() 62 ax.get_xaxis().set_visible(False) 63 ax.get_yaxis().set_visible(False) 64 65 ax = plt.subplot(2, n, i+1+n) 66 plt.imshow(decoded_img[i].reshape(28, 28)) 67 plt.gray() 68 ax.get_xaxis().set_visible(False) 69 ax.get_yaxis().set_visible(False) 70plt.show()
エラー文
raceback (most recent call last): File "/workdir/mnist.py", line 54, in <module> plt.imsave('tmp.png', decoded_img[1]) File "/usr/local/lib/python3.6/dist-packages/matplotlib/pyplot.py", line 2251, in imsave return matplotlib.image.imsave(fname, arr, **kwargs) File "/usr/local/lib/python3.6/dist-packages/matplotlib/image.py", line 1582, in imsave "RGBA", pil_shape, rgba, "raw", "RGBA", 0, 1) File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 2729, in frombuffer im = im._new(core.map_buffer(data, size, decoder_name, 0, args)) ValueError: buffer is not large enough
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。