質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1560閲覧

pythonのmnistプログラムが上手くいかない

gogongon

総合スコア1

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/23 03:22

編集2020/05/23 04:29

#エラー内容
mnistを行おうとしたら以下のようなエラーが発生しました

例外が発生しました: ValueError
Cannot feed value of shape (1, 64) for Tensor 'Placeholder:0', which has shape '(?, 784)'

どのように改善すればよいのでしょうか
#エラー箇所
おそらく以下の部分の改善でエラーが治ると思うのですが

python

1def imageToData(filename): 2 # 画像を8x8のグレースケールへ変換 3 grayImage = PIL.Image.open(filename).convert("L") 4 grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS) 5 # 数値リストへ変換 6 numImage = np.asarray(grayImage, dtype = float) 7 numImage = np.floor(16 - 16 * (numImage / 256)) 8 numImage = numImage.flatten() 9 10 return numImage 11 12data = imageToData("out.jpg") 13 14# 分類する 15result = y.eval(feed_dict={x: [data]})

#プログラム全体

python

1import tensorflow as tf 2import numpy as np 3import matplotlib.pyplot as plt 4import tkinter 5from PIL import Image, ImageDraw 6 7from tensorflow.contrib.learn.python.learn.datasets import mnist as mnist_loader 8import base64 9from io import BytesIO 10import PIL 11 12 13# (1)手書き数字の学習データを読み込みます。 14mnist = mnist_loader.read_data_sets("MNIST_data/", one_hot=True) 15 16# (2)ニューラルネットワークサイズ等設定値を指定します。 17x = tf.placeholder("float",[None,784]) 18Weight = tf.Variable(tf.zeros([784,10])) # 縦28セル*横28セルなので、ニューラルネットワークの第1層は。784 19b = tf.Variable(tf.zeros([10])) # 第2層は10個のニューロンを設定。10個の数字の対応する箇所の値が大きくなるよう学習させる 20y = tf.nn.softmax(tf.matmul(x,Weight)+b) 21y_ = tf.placeholder("float",[None,10]) 22cross_entropy = -tf.reduce_sum(y_*tf.log(y)) 23train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 24 25# (3)学習の実行。ニューラルネットワークに学習させる回数は1200回。 26init = tf.global_variables_initializer() 27ss = tf.InteractiveSession() 28ss.run(init) 29 30for times in range(1200): 31 xb, yb = mnist.train.next_batch(100) 32 ss.run(train_step, feed_dict={x: xb, y_: yb}) 33 34class Application(tkinter.Frame): 35 def __init__(self, master=None): 36 super().__init__(master) 37 self.master = master 38 self.master.title('tkinter canvas trial') 39 self.pack() 40 self.create_widgets() 41 self.setup() 42 43 44 def create_widgets(self): 45 self.vr = tkinter.IntVar() 46 self.vr.set(1) 47 self.write_radio = tkinter.Radiobutton(self, text='write', variable=self.vr, value=1, command=self.change_radio) 48 self.write_radio.grid(row=0, column=0) 49 self.erase_radio = tkinter.Radiobutton(self, text='erase', variable=self.vr, value=2, command=self.change_radio) 50 self.erase_radio.grid(row=0, column=1) 51 52 self.clear_button = tkinter.Button(self, text='clear all', command=self.clear_canvas) 53 self.clear_button.grid(row=0, column=2) 54 55 self.save_button = tkinter.Button(self, text='save', command=self.save_canvas) 56 self.save_button.grid(row=0, column=3) 57 58 self.test_canvas = tkinter.Canvas(self, bg='white', width=600, height=600) 59 self.test_canvas.grid(row=1, column=0, columnspan=4) 60 self.test_canvas.bind('<B1-Motion>', self.paint) 61 self.test_canvas.bind('<ButtonRelease-1>', self.reset) 62 63 def setup(self): 64 self.old_x = None 65 self.old_y = None 66 self.color = 'black' 67 self.eraser_on = False 68 self.im = Image.new('RGB', (600, 600), 'white') 69 self.draw = ImageDraw.Draw(self.im) 70 71 def change_radio(self): 72 if self.vr.get() == 1: 73 self.eraser_on = False 74 else: 75 self.eraser_on = True 76 77 def clear_canvas(self): 78 self.test_canvas.delete(tkinter.ALL) 79 80 def save_canvas(self): 81 filename = "out.png" 82 self.im.save(filename) 83 84 def paint(self, event): 85 if self.eraser_on: 86 paint_color = 'white' 87 else: 88 paint_color = 'black' 89 if self.old_x and self.old_y: 90 self.test_canvas.create_line(self.old_x, self.old_y, event.x, event.y, width=5.0, fill=paint_color, capstyle=tkinter.ROUND, smooth=tkinter.TRUE, splinesteps=36) 91 self.draw.line((self.old_x, self.old_y, event.x, event.y), fill=paint_color, width=5) 92 self.old_x = event.x 93 self.old_y = event.y 94 95 def reset(self, event): 96 self.old_x, self.old_y = None, None 97 98root = tkinter.Tk() 99app = Application(master=root) 100app.mainloop() 101 102def imageToData(filename): 103 # 画像を8x8のグレースケールへ変換 104 grayImage = PIL.Image.open(filename).convert("L") 105 grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS) 106 # 数値リストへ変換 107 numImage = np.asarray(grayImage, dtype = float) 108 numImage = np.floor(16 - 16 * (numImage / 256)) 109 numImage = numImage.flatten() 110 111 return numImage 112 113data = imageToData("out.jpg") 114 115# 分類する 116result = y.eval(feed_dict={x: [data]}) 117 118print(result) # 分類結果の表示。配列の先頭が0で末尾が9に相当し、可能性が高いと判定されたものほど1に近い値が表示されます。 119 120plt.bar(np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), result[0])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/05/23 04:19

・コードは「コードの挿入」で記入してください。 ・エラーメッセージは全文を掲載してください。
meg_

2020/05/23 06:27

エラーメッセージは上記で全部ですか? エラー発生行が記載されませんが?(ユーザー名等は隠してもらって結構ですが、トレースバック含めて掲載してください)
gogongon

2020/05/23 06:32

例外が発生しました: ValueError Cannot feed value of shape (1, 64) for Tensor 'Placeholder:0', which has shape '(?, 784)' File "C:\Users\user\Desktop\vscode\python\mnist.py", line 116, in <module> result = y.eval(feed_dict={x: [data]}) これがエラー文の全文です
meg_

2020/05/23 06:56

画像のサイズをplaceholderに合わせれば良いのではないでしょうか?
gogongon

2020/05/23 08:07

def imageToDataの中を flatten().shape(,784)にしてみたんですけどどうもうまくいかないです
meg_

2020/05/23 08:30

サイズ調整しているのは下記では? grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS)
gogongon

2020/05/23 08:41

出来ました!
guest

回答1

0

自己解決

grayImage = grayImage.resize((1,784),PIL.Image.ANTIALIAS)
にしてサイズを合わせる

投稿2020/05/23 08:43

gogongon

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問